У мене є програма, яка може виводити її результати лише у файли, з -o
варіант. Цього разу мені потрібно вивести його на консоль, тобто stdout
. Ось моя перша спроба:
myprog -o /dev/stdout input_file
Але це говорить:
/ dev / не піддається запису
Я знайшов це питання це схоже на моє, але /dev/stdout
очевидно, не буде працювати без додаткової магії.
З: Як перенаправити вихід з файлу на stdout
?
P.S. Звичайні методи без будь-якого спеціалізованого програмного забезпечення є кращими.
Відповіді:
5 за відповідь № 1Багато інструментів інтерпретують a -
як stdin / stdout залежно від контексту його використання. Хоча це не є оболонкою і тому залежить від використовуваної програми.
У вашому випадку наступне може вирішити вашу проблему:
myprog -o - input_file
4 для відповіді № 2
Якщо програма може записувати лише у файл, тоді ви можете використовувати названу трубку:
pipename=/tmp/mypipe.$$
mkfifo "$pipename"
./myprog -o "$pipename" &
while read line
do
echo "output from myprog: $line"
done < "$pipename"
rm "$pipename"
Спочатку створюємо трубу, вкладаємо її /tmp
щоб не відмовлятися від резервних програм. The $$
є нашим PID, і робить це ім'я унікальним під час виконання.
Ми запускаємо програму у фоновому режимі, і вона повиннаблок намагається записати в трубу. Деякі програми використовують техніку під назвою "картографування пам'яті", і в цьому випадку це не вдасться, оскільки труба не може бути відображена в пам'яті (хороша програма перевірить це).
Потім ми читаємо трубу в сценарії, як і будь-який інший файл.
Нарешті видаляємо трубу.
2 для відповіді № 3
Ти можеш cat
вміст файлу, написаного автором myprog
.
myprog -o tmpfile input_file && cat tmpfile
Це дало б описаний ефект - дозволить вам передавати вихідний сигнал myprog
до якоїсь наступної команди - хоча це інший підхід, ніж ви передбачали.
За тієї обставини, що вихід myprog
(можливо, влучніше notmyprog
) занадто великий, щоб писати на диск, такий підхід був би недобрий.
Це буде рішення, яке очищає тимчасовий файл у тому ж рядку і все ще передає вміст у кінці
myprog -o tmpfile input_file && contents=`cat tmpfile` && rm tmpfile && echo "$contents"
Який вміст файлу зберігає в змінній, щоб отримати доступ до нього після видалення файлу. Зверніть увагу на лапки в аргументі echo
командування. Вони важливі для збереження нових рядків у вмісті файлу.