如何防止脚本在 shell 退出时终止?

如何防止脚本在 shell 退出时终止?

特别是,我创建了一个脚本来启动 Firefox,双击该脚本并选择“在终端中运行”,但是当 shell 退出时,Firefox 会立即被终止。

我该如何防止这种情况发生?

答案1

您需要将其放在nohuplaunch 命令之前 firefox,因此它需要如下所示:

>$ nohup firefox

答案2

另外,请确保将 Firefox 作为后台作业执行,而不是作为前台运行,因为 shell 是父级,并且在返回提示之前等待 Firefox 运行并退出。

答案3

您在网上找到的大多数解决方案都会在子 shell 中运行 Firefox 的脚本。该子 shell 退出后,您将重新获得控制权。如果 Firefox 脚本在后台运行,您将看不到它的更改和变量设置,并且如果其父 shell(您的真实 shell)退出,它可能仍会在后台继续运行。

其背后的主要原因是 shell,包括 bash,它们之间有非常明显的区别

  • 交互模式:它们显示提示,读取用户的命令,并循环执行它们。
  • 非交互模式:在这种情况下,它们本质上是作为解释器语言执行的,解释 shell 脚本。

在脚本执行后(这次是 firefox 启动器/包装器脚本),没有简单的方法可以将 bash 从非交互式脚本模式更改为交互式脚本模式。

这是可能的,但据我所知,没有 shell 对此支持。

幸运的是,有许多棘手的方法可以实现您的目标:

  1. 您可以运行非交互式脚本作为 bash 的初始化文件。所以:bash --bashrc /here/is/what/i/want.sh
  2. 你可以修改/here/is/what/i/want.sh重新执行它自己的解释器,但此时已经处于交互模式。这可以通过命令来完成exec /bin/bash -i。只需将其放在脚本的末尾即可。

相关内容