我正在尝试编写一个脚本来执行以下操作:
- 打开运行长时间运行的命令的终端窗口
- (理想情况下)使用 xdotool 将终端窗口移动到屏幕左上角
- 仅当长时间运行的命令以零返回代码退出时才关闭终端窗口
用 Windows 的术语来说,我希望在成功start cmd /c long_running_cmd
时执行与 Linux 等效的操作,在失败时long_running_cmd
执行与 Linux 等效的操作。start cmd /k long_running_cmd
到目前为止,我有一个脚本,它使用给定的命令启动 xterm,然后根据需要移动窗口:
#!/bin/bash
# open a new terminal window in the background with the long running command
xterm -e ~/bin/launcher.sh ./long_running_cmd &
# move the terminal window (requires window process to be in background)
sleep 1
xdotool search --name launcher.sh windowmove 0 0
~/bin/launcher.sh 用于运行传递给它的命令行参数中的任何内容:
#!/bin/bash
# execute command line arguments
$@
long_running_cmd
但是,完成后我无法关闭 xterm 窗口。
我认为类似的东西xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &
可能是我想要的,以便 xterm 在后台启动并运行./long_running_cmd && kill $PPID
。因此,xterm 窗口中的 shell 随后运行长时间运行的命令,如果成功完成,则 shell 的父进程(即拥有 xterm 窗口的进程)将被终止,从而关闭 xterm 窗口。
但是,这不起作用:什么都没有发生,所以我怀疑我的引用或转义不正确,而且我无法修复它。
另一种方法是获取 的 PID long_running_cmd
,使用wait
等待它完成,然后使用 终止 xterm 窗口kill $!
(因为$!
指的是后台启动的最后一个任务,即 xterm 窗口)。但是我想不出一个好方法将 的 PID 和退出值从 xtermlong_running_cmd
窗口中运行的 shell 中取出并放入启动 xterm 窗口的 shell 中(没有将它们写入某个文件,这似乎是不必要的?)。
我做错了什么,或者有没有更简单的方法来实现这一点?
答案1
提示!您可以验证之前执行的命令的退出代码:
if [ $? -eq 0 ]
then
exit 0
fi