Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 脚本退出后如何退出终端?_Bash_Shell_Terminal - Fatal编程技术网

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不是此项的父项。我如何改变这个

我想你是在Mac电脑上,因为你提到了偏好。问题是你是如何开始剧本的


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

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

终端会话的shell是一个进程;通常,在执行shell脚本时,终端会话shell会启动第二个shell进程并在该进程下运行脚本。因此,脚本末尾的
退出
会告诉第二个shell终止—当它到达脚本末尾时,它无论如何都会这样做。虽然您可以尝试从第二个shell进程中删除第一个shell进程(请参阅另一个答案中关于
$PPID
的注释),但这不是一种很好的形式

为了让脚本按预期的方式工作,您需要让终端会话shell使用bash的内置
source
command-type
source/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?