sudo fio myjog | tee mylog
当我在终端窗口中发出命令时,我可以将fio
日志保存到文件中mylog
。
但是如果我发出命令sudo gnome-terminal -x sudo fio myjog | tee mylog
,mylog
则会创建内部没有任何文本的文件。
如何从中捕获打印日志gnome-terminal -x
?
答案1
命令行中运行的每个命令按顺序如下:
- 由 shell 解释;
- 由可执行文件解释;
在这种情况下|
,使 shell 解释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
(以及其他 shell 的)功能,您需要明确运行该命令bash
(附注:如果您要在/选项的参数中使用,则无需sudo
运行):gnome-terminal
sudo
-x
-e
gnome-terminal -e "bash -c \"sudo fio myjog | tee mylog\""
答案2
要求 gnome-terminal 使用特定命令运行 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