![解决 /bin/sh 造成的 $PATH 混淆(dash)](https://linux22.com/image/1046209/%E8%A7%A3%E5%86%B3%20%2Fbin%2Fsh%20%E9%80%A0%E6%88%90%E7%9A%84%20%24PATH%20%E6%B7%B7%E6%B7%86%EF%BC%88dash%EF%BC%89.png)
这个问题是https://unix.stackexchange.com/questions/126955/percent-in-path-environment-variable。我将其发布在这里,因为它更特定于发行版。
sh 默认使用的 shell 即 dash,与 execvp 不兼容,因为它会修改 $PATH 变量。处理奇怪文件名的标准方法是使用 URL 编码方案。现在我无法使用该标准,因为 dash 保留了 %。为了解决这个问题,我有以下选择
建议我的 Ubuntu 用户将符号链接 /bin/sh 更改为其他内容(例如 bash)。由于 popen(3) 依赖于 /bin/sh,因此有必要全局执行此操作。
通过使用 % 以外的其他内容来区别于传统的 URL 编码
任何以下情况发生时,都会抛出错误禁忌角色(是的,Windows,但这些限制在双启动配置中是合理的)出现。
理想情况下,我更喜欢选项 (1),这似乎是最好的选择。它使得在文件名中使用标准化转义方案成为可能。但是,由于 dash 的行为明显不同于其他一些 shell,如果任何系统脚本依赖于 dash 独有的功能,它就会破坏系统。此外,它还要求用户具有 root 权限。
选项 (2) 意味着我必须找到另一个不会在任何地方发生冲突的符号。当然,某些 shell 可能会搞砸任何非字母的符号。
选项(3)意味着功能性下降太多
答案1
选项一相当简单。你只需要运行:
sudo dpkg-reconfigure dash
然后选择“否”。这将推/bin/sh
回到/bin/bash
。
您可以手动执行此操作(删除链接,创建新链接),但这是官方方法。