我创建了一个启动应用程序的 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
从终端启动时,此方法可以正常工作,即:
- 它显示“测试”,按下回车键后 Firefox 启动
- 关闭终端后 Firefox 仍保持活动状态
但是,当从桌面启动器启动它时:
gnome-terminal -e "script"
按下回车键后,终端显示“测试”并关闭(firefox从未出现,我认为它是被终端杀死的)。
然而,以下工作是从启动器开始的:
#!/bin/bash
echo "test"
read e
nohup firefox & 2> /dev/null
sleep 1
exit
在这种情况下,firefox 在按下回车键后启动,并且在终端在睡眠时间之后关闭(或在睡眠时间内关闭)时保持活动状态。