1

我写了一个简单的脚本

#!/bin/bash
nohup $1 &
exit

它应该做的是,如果我执行'scriptName' gedit,它必须打开 gedit 然后关闭终端。但是,问题是脚本执行后终端没有关闭。

处理的事情:

  • 检查终端首选项When command exits: Exit the terminal
  • 我想把这个脚本放进去/usr/local/bin,我不能像 . ./脚本名
  • 看起来终端不是这个的父级。我该如何改变?
4

3 回答 3

2

由于以下原因,您尝试的方法将不起作用:

终端会话的外壳是一个进程;通常,当您执行 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

于 2013-11-09T19:03:48.393 回答
1

下面给出了示例脚本。

#!/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 帮助我关闭终端并确保在命令末尾添加“&” 。:)

于 2018-01-05T06:47:32.887 回答
0

我假设您使用的是 Mac - 因为您提到了首选项。问题是您是如何开始编写脚本的?

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

于 2013-11-09T19:02:12.387 回答