我写了一个简单的脚本
#!/bin/bash
nohup $1 &
exit
它应该做的是,如果我执行'scriptName' gedit
,它必须打开 gedit 然后关闭终端。但是,问题是脚本执行后终端没有关闭。
处理的事情:
- 检查终端首选项
When command exits: Exit the terminal
- 我想把这个脚本放进去
/usr/local/bin
,我不能像 . ./脚本名 - 看起来终端不是这个的父级。我该如何改变?
由于以下原因,您尝试的方法将不起作用:
终端会话的外壳是一个进程;通常,当您执行 shell 脚本时,终端会话 shell 会启动第二个 shell 进程并在该进程下运行脚本。所以你exit
在脚本的末尾告诉第二个 shell 终止 - 它无论如何都会这样做,因为它已经到达脚本的末尾。虽然您可以尝试从第二个 shell 进程中杀死第一个 shell 进程(请参阅$PPID
另一个答案中的评论),但这不是很好的形式。
为了使您的脚本按您期望的方式工作,您需要使用 bash 的内置source
命令 typesource /path/to/your/script gedit
或. /path/to/your/script gedit
简称来让您的终端会话 shell 运行脚本中的命令。
由于您需要执行此操作的方式,将脚本放在您的PATH
设备上将无济于事 - 但您可以创建一个别名(扩展为一系列 shell 命令的“快捷方式”)以更轻松地运行脚本 - 添加一条线喜欢alias your_alias_name='. /path/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 帮助我关闭终端并确保在命令末尾添加“&” 。:)
我假设您使用的是 Mac - 因为您提到了首选项。问题是您是如何开始编写脚本的?
如果您启动终端,然后从终端运行“scriptName”,终端将不会退出,因为它仍在运行您的 shell。仔细检查首选项,它说“当 shell 退出时”,而不是“当命令退出时”。