Когда я даю команду sudo fio myjog | tee mylog
в окне терминала я могу сохранить fio
войдите mylog
файл.
Но если я даю команду sudo gnome-terminal -x sudo fio myjog | tee mylog
, mylog
файл будет создан без любого текста внутри.
Как получить печатный журнал от gnome-terminal -x
?
Каждая команда запускается в командной строке в следующем порядке:
В В этом случае |
оболочка интерпретирует sudo gnome-terminal -x sudo fio myjog | tee mylog
как две команды, переданные друг другу по конвейеру (sudo gnome-terminal -x sudo fio myjog
и tee mylog
, первая - по второй).
Результатом этого является то, что вывод sudo gnome-terminal -x sudo fio myjog
передается по каналу tee mylog
; поскольку gnome-terminal
ничего не выводит, mylog
пусто.
Используйте опцию -e
для передачи команды, которая будет выполнена в качестве аргумента;
Команды, пропущенные через опции -e
, выполняются в sh
;
В этом случае Так как вы хотите использовать канал, который является функцией bash
(и других оболочек), вам нужно явно запустить команду в bash
(примечание: вам не нужно sudo
для запустите gnome-terminal
, если вы собираетесь использовать sudo
в аргументе для опций -x
/ -e
):
gnome-terminal -e "bash -c \"sudo fio myjog | tee mylog\""
Попросите gnome-терминал запустить bash с определенной командой. Например,
gnome-terminal -x bash -c " printf "YOLO"; sleep 5 "
В вашем случае сделайте его
gnome-terminal -x bash -c "sudo fio myjog | tee mylog"
Альтернативным,
попросите команду script
зарегистрировать вывод вместо tee
. Пример,
gnome-terminal -x script -c "sudo apt-get update" myLog