打开一个终端窗口并运行命令,然后如果命令成功完成则关闭终端窗口?

打开一个终端窗口并运行命令,然后如果命令成功完成则关闭终端窗口?

我正在尝试编写一个脚本来执行以下操作:

  1. 打开运行长时间运行的命令的终端窗口
  2. (理想情况下)使用 xdotool 将终端窗口移动到屏幕左上角
  3. 仅当长时间运行的命令以零返回代码退出时才关闭终端窗口

用 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

相关内容