当bash中的程序退出时,关闭从bash打开的终止符终端

当bash中的程序退出时,关闭从bash打开的终止符终端,bash,terminator,Bash,Terminator,我有一个udev规则,每当我插入某个USB设备时,它都会调用脚本。该脚本使用以下命令启动终端: terminator -e "...some_program" & exit (也可能是xterm,据我所知,这并不重要。) 一旦“some_program”完成了它应该做的事情,它就会退出(从该程序内部退出,而不是从bash退出),但终结者终端保持打开状态,除非我按住Ctrl+C键,在这种情况下它会关闭。但我不想按Ctrl+C组合键,这就是重点 我有另一个udev规则,当USB设备被移除时

我有一个udev规则,每当我插入某个USB设备时,它都会调用脚本。该脚本使用以下命令启动终端:

terminator -e "...some_program" & exit
(也可能是xterm,据我所知,这并不重要。)

一旦“some_program”完成了它应该做的事情,它就会退出(从该程序内部退出,而不是从bash退出),但终结者终端保持打开状态,除非我按住Ctrl+C键,在这种情况下它会关闭。但我不想按Ctrl+C组合键,这就是重点

我有另一个udev规则,当USB设备被移除时会运行。但该规则在从服务器打开的终端之前不会触发 “插入usb规则”关闭(即使我在从“插入usb规则”启动脚本后使用了
&exit

我没有任何想法,我到处寻找解决方案。但什么都没用

  • 我尝试从某个_程序内部发送SIGINT,而不是使用exit(1),但没有成功。程序终止,但终端保持打开状态

  • 我试图通过获取PID并杀死它来杀死终端。它不起作用

  • 我试着打开另一个终端并从那里杀死PID,但没有成功


您可能想尝试以下方法:

terminator -e "bash -c 'yourcommand'"
至少当我以这种方式调用ls时,它会自动关闭:

# this closes automatically:
terminator -e "bash -c 'ls'"
# to test, this closes when the less command is ended (eg. by hitting q):
terminator -e "bash -c 'ls | less'"

显然,terminator不会以这种方式初始化它自己的shell,并且只要使用-c选项传递的命令结束,shell就会终止,terminator会自动关闭窗口。

您可能需要尝试以下操作:

terminator -e "bash -c 'yourcommand'"
至少当我以这种方式调用ls时,它会自动关闭:

# this closes automatically:
terminator -e "bash -c 'ls'"
# to test, this closes when the less command is ended (eg. by hitting q):
terminator -e "bash -c 'ls | less'"

显然,terminator并没有以这种方式初始化它自己的shell,并且一旦使用-c选项传递的命令结束,shell就会终止,terminator会自动关闭窗口。

解决了这个问题。不需要使用“bash-c”。 “some_program”是一个ROS节点,所以我需要做的就是杀死rosmaster

$killall-9罗斯马斯特


现在它可以工作了。

解决了它。不需要使用“bash-c”。 “some_program”是一个ROS节点,所以我需要做的就是杀死rosmaster

$killall-9罗斯马斯特


现在它可以工作了。

一些终端会自动完成这项工作。这是一个比bash问题更具体的问题。(你愿意考虑其他终端吗?)你是否已经尝试过从这样的BASH中间接打开你的脚本:终止符-e“BASH-C’你的命令”?可能这会阻止终端本身打开外壳,并在外壳关闭时结束终端。如何在终端配置文件中设置
exit\u action
选项?我没有设置它,所以我想它会设置为默认设置。一些终端会自动执行此操作。这是一个比bash问题更具体的问题。(你愿意考虑其他终端吗?)你是否已经尝试过从这样的BASH中间接打开你的脚本:终止符-e“BASH-C’你的命令”?可能这会阻止终端本身打开外壳,并在外壳关闭时结束终端。如何在终端配置文件中设置
exit\u action
选项?我没有设置它,所以我猜它设置为默认设置。我不明白为什么这会有什么不同。现在
bash
是他正在执行的
somecommand
,当它完成时,他的窗口不会关闭。是的,你的右边,bash是somecommand。对我来说,这与终结者一起工作,但对我来说,直接启动也起作用,所以他的系统有些不同,或者他的脚本没有正确终止。我至少建议你试试。谢谢你。我试过你的建议,我想我的系统有些不同。我尝试了你的例子,得到了这样的结果:“**(终止符:2940):警告**:绑定'a'失败!无法绑定隐藏窗口键,另一个实例/窗口有它。PluginRegistry::load_插件:导入插件init.py失败:'module'对象没有属性'AVAILABLE'”,如果我尝试使用我的'some_程序',它实际上是一个ros程序,然后,终结者立即打开和关闭。xterm也是如此。我不明白为什么这会有什么不同。现在
bash
是他正在执行的
somecommand
,当它完成时,他的窗口不会关闭。是的,你的右边,bash是somecommand。对我来说,这与终结者一起工作,但对我来说,直接启动也起作用,所以他的系统有些不同,或者他的脚本没有正确终止。我至少建议你试试。谢谢你。我试过你的建议,我想我的系统有些不同。我尝试了你的例子,得到了这样的结果:“**(终止符:2940):警告**:绑定'a'失败!无法绑定隐藏窗口键,另一个实例/窗口有它。PluginRegistry::load_插件:导入插件init.py失败:'module'对象没有属性'AVAILABLE'”,如果我尝试使用我的'some_程序',它实际上是一个ros程序,然后,终结者立即打开和关闭。xterm也是如此。