/ / Перенаправлення виводу з файлу на stdout - bash, shell, unix, stdout

Перенаправлення виводу з файлу на stdout - bash, shell, unix, stdout

У мене є програма, яка може виводити її результати лише у файли, з -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 командування. Вони важливі для збереження нових рядків у вмісті файлу.