我写了一个简单的脚本
#!/bin/bash
nohup $1 &
exit
它应该做的是如果我执行'scriptName' gedit
,它必须打开gedit然后关闭终端。但是,问题是终端在脚本执行后没有关闭。
照顾的事情:
When command exits: Exit the terminal
/usr/local/bin
中,所以我不能像执行那样执行。 ./scriptname 答案 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让我关闭终端并确保在命令结尾处添加"&" 。 :)