2012-03-13 1 views
0

Название должно объяснить все. У меня есть программа, для которой stdout требуется много, - я хочу полностью перенаправить вывод в файл, но только после завершения вывода и закрытия команды. Как я могу это сделать?Вывод команды перенаправления в файл - только когда команда stdout была закрыта из команды

Большое спасибо!

+0

[@jordanm] (http://stackoverflow.com/a/9690605/96588) является правильным, но вы должны спросить себя * почему * ты это делаешь. Программы Linux хороши в обработке потоков, и программа будет * намного быстрее, если вы не пишете на диск, прежде чем продолжить следующую команду. – l0b0

+0

Это не программа, это 1-строчный скрипт. Цель состоит в том, чтобы получить zpool iostat вывод, записанный в файл, который я всегда могу проанализировать. В общей сложности 1 операция ввода-вывода в течение 5 минут. Поверь мне, у этого есть смысл =) – cedivad

+0

Да, это идеальный случай для него. Приобретая привычку указывать на это, поскольку, как правило, используется слишком много файлов (TM) :) – l0b0

ответ

1

Чтобы сделать это, вам нужно сохранить вывод в переменной. Я не рекомендую это, если вывод очень большой.

output=$(command) 
printf "$output" > logfile 
+0

Спасибо. (я должен был прийти к нему своими силами) – cedivad

+0

Иногда чрезмерная мысль может привести к пропуску простых решений. – jordanm

+1

Или если вам не нужна дополнительная конечная новая строка (или команда всегда выводит конечную новую строку), 'echo -n" $ output "> logfile'. – l0b0

0

Если вы стремитесь иметь выход как на терминале и в файле:

NAME 
     tee - read from standard input and write to standard output and files 

SYNOPSIS 
     tee [OPTION]... [FILE]... 

DESCRIPTION 
     Copy standard input to each FILE, and also to standard output. 

(от man tee)

+0

Я не думаю, что об этом и шла речь. – jordanm

+0

Моя цель состоит в том, чтобы выводить только файл. Я хочу, чтобы ввод записывался только после завершения команды. Думая об этом, я думаю, что могу просто использовать bash vars ... – cedivad