首先,问题是:当用户单击关闭按钮并且终端本身(以及其中运行的进程)从命令行启动时,如何警告用户脚本正在运行。
我有一个脚本,它执行用户在脚本终止之前想要撤消的操作。有一个读取语句会暂停该过程,直到用户点击 [enter]。但是,不幸的用户偶尔会单击右上角的关闭按钮 [x]。我还没有找到捕获关闭按钮的陷阱,但警告就可以了。 gnome 终端提供所需的警告。
但,当从脚本(例如 Thunar 自定义操作)启动 gnome-terminal 时,该功能不起作用。为了澄清这一点,请考虑以下脚本:
gnome-terminal --command="sh readx.sh"
其中 readx.sh 包含一行: read x
单击右上角的 [x] 按钮后,以这种方式启动的终端将在脚本仍处于活动状态时关闭而不发出警告。
任何诱捕或警告的方法都对我有用。
答案1
是的!包括一个 zenity 提示对我来说效果很好。当使用 nohup 执行脚本并包含 zenity 提示符时,线程将根据需要阻塞。
答案2
您实际上可以从终端窗口中分离运行的进程readx.sh
,因此即使您关闭了 gnome-terminal 窗口,它也会继续在后台运行并完成它应该做的事情。为此,您应该使用nohup
命令 - 它会断开进程与终端的连接,将其输出重定向到 nohup.out 并屏蔽它SIGHUP
。
我使用以下命令对其进行了测试:gnome-terminal -e "nohup bash ./123.sh"
脚本123.sh
仅包含sleep 7 && ls -a > 1.txt
.因此,当我运行上一个命令并关闭 gnome-terminal 窗口时,仍然会创建文件 1.txt。
答案3
我尝试了这个命令来解决这个问题。
Exec=mate-terminal -e "bash -i -c 'ssh my.server';bash"
该命令仅在 上测试mate-terminal
,未在gnome-terminal
.
我的mate-terminal
CentOS7版本是1.16.3。