终端窗口运行脚本/命令与桌面快捷方式运行的差异及挂载脚本需求咨询
终端窗口运行脚本/命令与桌面快捷方式运行的差异及挂载脚本需求咨询
嗨,我来帮你理清这个差异,顺便给你解决挂载脚本的需求~
首先,咱们先搞清楚两种启动方式的核心区别:
- 正常打开终端窗口:你启动的是一个交互式终端,背后是一个shell(比如bash、zsh)作为终端的子进程在运行。当你在里面执行
sleep 100时,这个命令是shell的子进程。此时你点关闭窗口,终端会检查自己的子进程(也就是那个shell)有没有未结束的子进程(sleep),所以会弹出“是否关闭”的警告——这是终端对交互式会话的保护机制。 - 桌面快捷方式启动终端:你的快捷方式里
Terminal=true的作用是让桌面环境启动一个终端程序,但它是把Exec里的命令作为终端的初始一次性命令来运行。也就是说,终端启动后直接执行sleep 100,这个命令就是终端的主任务,当你点关闭窗口时,系统会直接终止这个终端进程,不会去检查命令的子进程状态,自然就没有警告。当命令执行完毕后,终端也会自动关闭,因为它的“任务”已经完成了。
接下来针对你的rclone挂载脚本需求,要让窗口保持打开且防止误关,给你几个可行的方案:
方案1:让终端启动交互式shell并保留会话
把Exec的内容改成让终端先启动一个bash,执行挂载命令后,再启动一个交互式bash留在那里。这样终端会把交互式bash当作主进程,关闭时会触发警告,而且窗口会一直保持打开。示例:
Exec=bash -c "rclone mount your-remote:your-target-path /mnt/your-mount-point; exec bash"
解释:
bash -c "...":启动一个bash来执行引号里的命令- 先执行你的rclone挂载命令(不管挂载成功与否,后续命令都会执行)
exec bash:用一个新的交互式bash替换当前的bash进程,这样终端就会进入正常的交互式会话状态,关闭时会检查进程状态并弹出警告。
方案2:利用终端的“等待”参数(取决于你用的终端)
有些终端程序支持--wait之类的参数,会等待命令执行完毕后保持窗口打开,或者检测子进程状态。比如GNOME Terminal可以这么写:
Exec=gnome-terminal --wait -- bash -c "rclone mount your-remote:your-target-path /mnt/your-mount-point"
不过这个方法的兼容性取决于你使用的终端(比如Konsole、XFCE Terminal的参数可能不同),需要对应终端的文档来确认。
方案3:让窗口等待用户输入再关闭
如果只是想让窗口在挂载命令执行后不自动关闭,可以在命令末尾加一个等待输入的命令,比如:
Exec=bash -c "rclone mount your-remote:your-target-path /mnt/your-mount-point; read -p 'Press Enter to close the window...'"
但要注意,这种方式下如果挂载进程在后台运行,你点关闭窗口还是会直接终止进程,不会弹出警告——所以更推荐方案1。
最后,你提供的桌面快捷方式代码如下:
[Desktop Entry] Encoding=UTF-8 Version=1.0 Name=SOME_NAME Terminal=true Type=Application Exec=sleep 100 Icon=drive-removable-media
备注:内容来源于stack exchange,提问作者keldorn
相关产品推荐
相关产品推荐

