Перенаправление вывода в bash - PullRequest
1 голос
/ 11 ноября 2010

Вот что я пытаюсь сделать:

time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync"

При запуске этого на оболочке o / p будет

125+0 records in
125+0 records out
64000 bytes (62.5KB) copied, 0.028935 seconds, 2.1MB/s
real 0m 0.08s
user 0m 0.00s
sys 0m 0.01s

Я хочу захватитьвывод в переменную или в файл.Как мне это сделать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

Bash использует > для стандартного перенаправления вывода. Примером может быть:

./test.sh > outfile.txt

Если вы заинтересованы в добавлении, а не в замене outfile.txt, используйте >> вместо >. Оба перенаправляют стандартный вывод.

Однако вывод команды time в этом случае будет со стандартной ошибкой, поэтому вы должны использовать 2> вместо >.

time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync" 2> outfile.txt

Это почти работает, но команда time работает отдельно от команды оболочки sh, и, таким образом, только выходные данные команды sh будут перенаправлены в outfile.txt с помощью вышеуказанной команды. Чтобы включить вывод команды time, нам нужно заключить всю команду в круглые скобки, как показано ниже:

(time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync") 2> outfile.txt
2 голосов
/ 11 ноября 2010

Вы можете сделать:

(time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync") 2> file

Поскольку вам нужно перенаправить вывод как time, так и dd, вам необходимо заключить все это в (..).

И time, и dd отправляют свои выходные данные в stderr, поэтому использование > не будет работать, вам нужно 2>, которое перенаправляет stderr.

Чтобы получить вывод в переменной, вы можете сделать:

var=$((time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync") 2>&1)
1 голос
/ 11 ноября 2010

time sh -c "dd if = / dev / zero of = ddfile bs = 512 count = 125 && sync"> ./yourfile

> - это команда перенаправления

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