防止应用程序在终端退出时关闭

防止应用程序在终端退出时关闭

我创建了一个启动应用程序的 bash 脚本。由于我希望在应用程序启动时关闭终端窗口,因此我使用了以下行:

firefox & 2> /dev/null; exit;

只要我从命令行启动脚本,它就可以正常工作。但是,如果我从桌面启动器启动它,应用程序和终端都会关闭。有人能解释一下这是为什么吗?我使用的是 Ubuntu 10.10。

仅使用:

    nohup firefox

它可以工作。但如果可能的话,我还是想解释一下为什么原始版本在从桌面启动器启动时不起作用。

答案1

解决方案是在管道中使用正确的形式:

firefox > /dev/null 2>&1
exit

这在终端和桌面启动器上都有效。无需使用 nohup。

答案2

尝试 nohup 命令:

nohup firefox & 2> /dev/null; exit;

nohup 断开正在运行的作业与终端会话的连接,以防止它们在退出时被关闭。

但是,如果您只想启动 Firefox,那么只需创建它的快捷方式,无需 Bash 脚本。

进一步解释:尝试从终端运行脚本,保持 Firefox 窗口打开并关闭运行脚本的终端。Firefox 也会关闭,因为它是启动它的终端会话的子进程。

答案3

对我有用的一个解决方案是在脚本中加入 1 秒的睡眠时间。

下面是我尝试通过 gnome 桌面启动器运行的脚本的一个最小示例:

#!/bin/bash
echo "test"
read e

nohup firefox & 2> /dev/null
exit

从终端启动时,此方法可以正常工作,即:

  1. 它显示“测试”,按下回车键后 Firefox 启动
  2. 关闭终端后 Firefox 仍保持活动状态

但是,当从桌面启动器启动它时:

gnome-terminal -e "script"

按下回车键后,终端显示“测试”并关闭(firefox从未出现,我认为它是被终端杀死的)。

然而,以下工作是从启动器开始的:

#!/bin/bash
echo "test"
read e

nohup firefox & 2> /dev/null
sleep 1
exit

在这种情况下,firefox 在按下回车键后启动,并且在终端在睡眠时间之后关闭(或在睡眠时间内关闭)时保持活动状态。

相关内容