Перенаправить все в файл, созданный исполняемым файлом? - PullRequest
3 голосов
/ 09 декабря 2010

У меня есть куча исполняемых файлов, и я хочу сохранить выходные данные каждого из них в отдельном файле.

Для этой цели я использую следующую команду, но "2>&1" не работает каждый раз,И иногда выходные файлы остаются пустыми, даже если скрипт запускает данные из оболочки при запуске из оболочки.

Что я должен использовать вместо 2>&1?

./$file 2>&1 | tee "$outputFile" 

Ответы [ 3 ]

3 голосов
/ 09 декабря 2010

Некоторые исполняемые файлы не просто записывают в stdout и stderr, но вместо этого открывают / dev / tty и записывают в него.

Поэтому, чтобы перенаправить их, необходимо выполнить более сложные процедуры, включающие psuedo-tty,Смотрите команду script, что-то, что может сделать это.

2 голосов
/ 09 декабря 2010

Просто чтобы уточнить ответ Даррона, вы можете использовать команду script, чтобы захватить весь вывод.Вот пример, который пишет в stdout, stderr и / dev / tty, используя скрипт python, и захватывает все три вывода:

brent@battlecruiser:~$ cat test.py
import sys
sys.stdout.write('o\n')
sys.stderr.write('e\n')
with open('/dev/tty', 'w') as tty:
    tty.write('t\n')
brent@battlecruiser:~$ script testout
Script started, file is testout
brent@battlecruiser:~$ python test.py
o
e
t
brent@battlecruiser:~$ exit
Script done, file is testout
brent@battlecruiser:~$ head -n -3 testout | tail -n +3
o
e
t

Сравните это с тем, что происходит при использовании 2>1& и tee:

brent@battlecruiser:~$ python test.py 2>&1 | tee testout
e
t
o
brent@battlecruiser:~$ cat testout
e
o

Как видите, запись в /dev/tty не фиксируется.Попробуйте выполнить команду в команде script, как показано, и посмотрите, захватывает ли она все результаты.

2 голосов
/ 09 декабря 2010

Если вы хотите захватить как stdout, так и stderr, используйте:

./$file > $outputfile 2>&1

Однако некоторые программы умны и обнаруживают, к какому типу терминала их выход перенаправлен. Они могут генерировать другой вывод, если вы отправите его в файл ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...