![在启动时根据提示运行 bash 脚本,然后启动浏览器](https://linux22.com/image/926404/%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E6%A0%B9%E6%8D%AE%E6%8F%90%E7%A4%BA%E8%BF%90%E8%A1%8C%20bash%20%E8%84%9A%E6%9C%AC%EF%BC%8C%E7%84%B6%E5%90%8E%E5%90%AF%E5%8A%A8%E6%B5%8F%E8%A7%88%E5%99%A8.png)
我正在为我的客户创建一个标准的 Linux 映像,我想将其作为备份分发给他们。
我编写了一个 bash 脚本 -verifysetup.sh
用于检查机器是否已设置。如果已设置,则默默成功,但如果未设置,则让他们输入其帐户详细信息,然后下载其配置文件和更新的可执行文件。
每次机器以默认用户帐户启动时,我都需要发生以下情况:
- 运行
verifysetup.sh
(在终端中,以便他们可以响应提示) - 运行 chrome(指向 localhost 来显示其 UI)
- 关闭终端
为了实现这一目标,我:
- 创建如下
.desktop
文件:~/.config/autostart/
[Desktop Entry]
Type=Application
Exec=gnome-terminal -x bash -c "bash ~/bin/startui.sh"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_GB]=Flow
Name=Flow
Comment[en_GB]=
Comment=
- 创建了一个脚本
~/bin/startui.sh
(见下文),运行该veryifysetup.sh
脚本然后启动并放弃 Chrome
# Run the interactive setup script
bash ~/bin/verifysetup.sh
# "Start Chrome and disown"
(google-chrome --user-data-dir=r=~/chrome/chrome-1 --start-fullscreen --window-position=0,0 http://localhost </dev/null &>/dev/null &)
如果我打开一个终端并bash ~/bin/startui.sh
直接运行,然后关闭终端,那么这就可以完美地工作了 - 即使我关闭终端窗口,Chrome 也会启动并继续运行。
但是,当脚本在启动时运行时,或者如果我通过gnome-terminal -x bash ~/bin/startui.sh
从终端窗口调用来模拟此脚本,则 Chrome 窗口会在脚本退出时立即消失(如果我sleep 5
在末尾放置一个语句,startui.sh
我可以清楚地看到浏览器启动然后在终端窗口关闭时关闭。)
我也尝试过disown -a -h
在启动 Chrome 后放弃使用,但结果相同。有趣的是,如果我jobs -l
在此之前运行,则不会看到任何列出的作业。
那么,为什么通过新实例启动时 Chrome 会在脚本末尾关闭gnome-terminal
,而直接运行时却不会关闭?有没有更好的方法来实现我想要做的事情?