Bash 脚本退出后如何退出终端?
我写了一个简单的脚本Bash 脚本退出后如何退出终端?,bash,shell,terminal,Bash,Shell,Terminal,我写了一个简单的脚本 #!/bin/bash nohup $1 & exit 它应该做的是,如果我执行'scriptName'gedit,它必须打开gedit,然后关闭终端。但问题是,在脚本执行后,终端并没有关闭 注意事项: 当命令退出时,选中终端首选项以:退出终端 我想把这个脚本放到/usr/local/bin中,这样我就不能像..那样使用执行了/脚本名 似乎terminal不是此项的父项。我如何改变这个 我想你是在Mac电脑上,因为你提到了偏好。问题是你是如何开始剧本的 如果启动
#!/bin/bash
nohup $1 &
exit
它应该做的是,如果我执行'scriptName'gedit
,它必须打开gedit,然后关闭终端。但问题是,在脚本执行后,终端并没有关闭
注意事项:
- 当命令退出时,选中终端首选项以
:退出终端
- 我想把这个脚本放到
中,这样我就不能像..那样使用执行了/脚本名/usr/local/bin
- 似乎terminal不是此项的父项。我如何改变这个
如果启动终端,然后从终端运行“scriptName”,则终端不会退出,因为它仍在运行shell。仔细检查首选项,它显示“当shell退出时”,而不是“当命令退出时”。由于以下原因,您尝试的方法无法工作: 终端会话的shell是一个进程;通常,在执行shell脚本时,终端会话shell会启动第二个shell进程并在该进程下运行脚本。因此,脚本末尾的
退出
会告诉第二个shell终止—当它到达脚本末尾时,它无论如何都会这样做。虽然您可以尝试从第二个shell进程中删除第一个shell进程(请参阅另一个答案中关于$PPID
的注释),但这不是一种很好的形式
为了让脚本按预期的方式工作,您需要让终端会话shell使用bash的内置source
command-typesource/path/to/your/script gedit
或来运行脚本中的命令/path/to/your/script gedit
简称
由于您需要执行此操作的方式,将脚本放在
路径上不会有帮助-但您可以创建别名(扩展为一系列shell命令的“快捷方式”)以使运行脚本更容易-添加一行,如alias your_alias_name=”/示例脚本下面给出的路径/to/your/script'
到您的~/.bashrc
#!/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命令的值确定行为。您可以找到不同的值
Kill-25用于关闭终端,并确保在命令末尾添加“&”。) 我正在使用Ubuntu,它说“当命令退出时”是配置文件首选项。在“nohup”退出后,你可以用“kill$PPID”exec nohup gedit
杀死脚本的父进程。当我尝试时,没有关闭终端。难道我不可能得到执行脚本的终端的PID然后杀死它吗?是的,我错了。别名不会帮助您运行exec-nohup-gedit&
,或者就此而言exec-nohup-gedit-d
。我已经大幅修改了我的回答-请再试一次。是的,谢谢,它成功了。所以,source
说使用同一个shell运行脚本而不创建子shell?