如何将参数从Bash包装脚本传递给二进制程序?
如何通过.desktop文件传递参数给包装脚本并转发给目标程序?
搞定这个其实很简单,核心就是处理好路径问题和参数传递,分几步来:
1. 修正.desktop文件的Exec字段
你原来写的Exec=./app.wrapper arg1 arg3 -a arg4有个关键问题:桌面环境执行.desktop文件时,工作目录不一定是脚本所在的目录,./这种相对路径大概率找不到脚本。
正确的做法是用绝对路径指定脚本位置,比如你的脚本放在~/bin/目录下,就改成:
Exec=/home/your_username/bin/app.wrapper arg1 arg3 -a arg4
如果脚本已经在系统PATH环境变量里(比如/usr/local/bin/),也可以直接写:
Exec=app.wrapper arg1 arg3 -a arg4
(记得把your_username换成你的实际用户名)
2. 修改包装脚本传递参数
你的现有脚本里exec usr/bin/app args here是写死参数的,要把.desktop传过来的所有参数原样转发给/usr/bin/app,只需要用bash的特殊变量"$@"——它会完整保留每个参数的原始格式(包括带空格的参数不会被拆分)。
修改后的完整脚本:
#!/bin/bash # 保留你原来的环境变量和SCALE计算逻辑 SCALE=$(( ${GRID_UNIT_PX:-16} / 8 )) # 加个默认值,避免GRID_UNIT_PX未设置时报错 export GDK_BACKEND=x11 export GDK_SCALE=$SCALE # 用"$@"传递所有接收到的参数给目标程序 exec /usr/bin/app "$@"
我给GRID_UNIT_PX加了默认值16,这样如果桌面环境没设置这个变量,脚本也不会崩溃,你可以根据需要调整这个默认值。
3. 收尾配置
- 给脚本添加可执行权限:
chmod +x /path/to/app.wrapper - 把
.desktop文件放到正确的位置:- 仅个人使用:
~/.local/share/applications/ - 系统全局可用:
/usr/share/applications/
- 仅个人使用:
- 如果是放在个人目录,更新桌面数据库让系统识别:
update-desktop-database ~/.local/share/applications/
测试验证
你可以先在终端直接运行脚本测试参数是否正确传递:
/path/to/app.wrapper arg1 arg3 -a arg4
如果目标程序/usr/bin/app能正确接收到这些参数,那桌面快捷方式也没问题了。
内容的提问来源于stack exchange,提问作者Alexandru Nitan
相关产品推荐
相关产品推荐

