脚本退出后如何退出终端?

时间:2013-11-09 18:50:13

标签: bash shell terminal

我写了一个简单的脚本

#!/bin/bash
nohup $1 &
exit

它应该做的是如果我执行'scriptName' gedit,它必须打开gedit然后关闭终端。但是,问题是终端在脚本执行后没有关闭。

照顾的事情:

  • 检查终端偏好设置为When command exits: Exit the terminal
  • 我想把这个脚本放在/usr/local/bin中,所以我不能像执行那样执行。 ./scriptname
  • 看起来终端不是这个的父母。我该如何改变?

3 个答案:

答案 0 :(得分:2)

由于以下原因,您尝试的方法无效:

终端会话的shell是一个进程;通常在执行shell脚本时,终端会话shell启动第二个shell进程并在其下运行脚本。因此,脚本末尾的exit告诉第二个shell终止 - 无论如何它都会终止,因为它已到达脚本的末尾。虽然您可以尝试从第二个shell进程中杀死第一个shell进程(请参阅另一个答案中有关$PPID的注释),但这不是一个非常好的表单。

为了让您的脚本按预期的方式工作,您需要使用bash的内置source命令让终端会话shell在脚本中运行命令 - 键入source /path/to/your/script gedit ,或简称. /path/to/your/script gedit

由于您需要执行此操作的方式,将脚本放在PATH上无济于事 - 但您可以创建别名(扩展为一系列shell命令的“快捷方式”)使脚本更容易运行 - 在alias your_alias_name='. /path/to/your/script'

中添加~/.bashrc之类的行

答案 1 :(得分:0)

我假设你在Mac上 - 因为你提到偏好。问题是你是如何启动脚本的?

如果您启动终端然后从终端运行“scriptName”,则终端将不会退出,因为它仍在运行您的shell。仔细检查首选项,它会显示“当shell退出时”,而不是“当命令退出时”。

答案 2 :(得分:0)

在下面给出了示例脚本。

#!/bin/bash
echo "hi" 
/bin/bash/abc.sh &
sleep 2 
#sleep is used to pause the execution temporary to see the output.
kill -25 $PPID

传递给kill命令的值决定了行为。 Here您可以找到不同的值。

Kill -25让我关闭终端并确保在命令结尾处添加"&" 。 :)