我写了一个简单的脚本
#!/bin/bash
nohup $1 &
exit
它应该做的是如果我执行'scriptName' gedit
,它必须打开gedit然后关闭终端。但是,问题是终端在脚本执行后没有关闭。
事情照顾:
When command exits: Exit the terminal
的终端偏好/usr/local/bin
中,所以我不能像执行这样的执行。 ./scriptname您正在尝试的方法将不起作用,原因如下:
终端会话的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
。
我假设你在Mac上 - 因为你提到偏好。问题是你是如何启动脚本的?
如果您启动终端然后从终端运行“scriptName”,终端将不会退出,因为它仍在运行您的shell。仔细检查首选项,它会显示“当shell退出时”,而不是“当命令退出时”。
给出下面的示例脚本。
#!/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让我关闭终端,并确保在命令结束时添加“&”。 :)