Ubuntu下Bash脚本中xdg-open解析~路径与命令行不符的解决方法
解决Bash脚本中xdg-open无法正确解析~路径的问题
问题根源是:命令行直接输入xdg-open ~/Downloads/时,Bash会**自动将开头的解析为当前用户的家目录($HOME)**;但脚本中通过zenity获取的输入是原始字符串,Bash不会对变量内的做自动展开,导致xdg-open把~当成普通相对路径的一部分,从而拼接成错误路径。
解决方案1:安全替换开头的~为$HOME(推荐)
通过Bash的参数扩展功能,仅替换输入字符串开头的~为用户家目录,既保留其他场景的输入有效性(比如URL、普通相对路径),又避免安全风险:
修改后的脚本:
#!/usr/bin/env bash input=$(zenity --entry --text="Enter the URL or file." --title=Run --window-icon=question) # 替换输入字符串开头的~为当前用户的家目录 input=${input/#\~/$HOME} echo version=$BASH_VERSION xdg-open "$input" exit
解决方案2:使用eval展开路径(需注意安全风险)
eval会强制让Bash重新解析变量内容,从而展开~,但如果用户输入恶意命令(比如"; rm -rf ~"),eval会直接执行,存在安全隐患,仅在完全信任输入来源的场景下使用:
修改后的脚本片段:
# 替换原xdg-open行 eval "xdg-open $input"
内容的提问来源于stack exchange,提问作者DabiaTheNord
相关产品推荐
相关产品推荐

