双击桌面上的脚本后,在终端中显示输出

双击桌面上的脚本后,在终端中显示输出

我正在尝试制作一个演示虚拟机。在桌面上,我有一个脚本foo.sh,它将 stdout 输出到foo.log(例如使用some command > foo.log

当我双击脚本时,它会生成 foo.log。但是,我希望脚本也能实时显示标准输出(例如使用tail -f foo.log)。

我该怎么做?我需要将输出传输到两个地方吗?

答案1

这可能不是最优雅的方法,但它似乎有效:

将以下内容添加到脚本中:

touch foo.log
uxterm -e "tail -f foo.log" &
some command > foo.log

使用 gnome-terminal,替换uxterm -egnome-terminal -x

感谢山顶约德尔歌手为我指明这个解决方案。

答案2

Unix 的标准tee命令允许你将命令的标准输入重定向到一个或多个文件,并将其打印到标准输出。因此,你可以执行以下操作

myscript.sh|tee mylog.log

假设 myscript.sh 只是打印到标准输出(这实际上会简化它)

要在单击图标时打开终端窗口,您可以将其包装在另一个脚本中:

xterm -e "myscript.sh | tee mylog.log; read -p FINISHED"

您的解决方案的不同之处在于,您可以选择在脚本完成时关闭终端窗口或显示“按任意键继续......”消息 - 终端tail -f基本上无法知道脚本何时完成,因此您必须使用 Ctrl-C 来中断它。

此外,tail -f 的效率肯定不如直接打印到终端,但这在当今可能并不那么重要。

答案3

我按照 Sergy 的建议做了,如果有效,那可能是路径问题。下面是我使用的确切命令,结果是 xterm 打开,显示脚本的输出,然后显示“按回车键关闭”。我建议您在脚本名称前面添加路径,并可能添加日志文件名。

xterm -e "./myscript.sh | tee ./mylog.log; read -p Press\ return\ to\ close\ "

我的版本myscript.sh所做的只是回应几行,但它有效。

相关内容