解决 /bin/sh 造成的 $PATH 混淆(dash)

解决 /bin/sh 造成的 $PATH 混淆(dash)

这个问题是https://unix.stackexchange.com/questions/126955/percent-in-path-environment-variable。我将其发布在这里,因为它更特定于发行版。

sh 默认使用的 shell 即 dash,与 execvp 不兼容,因为它会修改 $PATH 变量。处理奇怪文件名的标准方法是使用 URL 编码方案。现在我无法使用该标准,因为 dash 保留了 %。为了解决这个问题,我有以下选择

  1. 建议我的 Ubuntu 用户将符号链接 /bin/sh 更改为其他内容(例如 bash)。由于 popen(3) 依赖于 /bin/sh,因此有必要全局执行此操作。

  2. 通过使用 % 以外的其他内容来区别于传统的 URL 编码

  3. 任何以下情况发生时,都会抛出错误禁忌角色(是的,Windows,但这些限制在双启动配置中是合理的)出现。

理想情况下,我更喜欢选项 (1),这似乎是最好的选择。它使得在文件名中使用标准化转义方案成为可能。但是,由于 dash 的行为明显不同于其他一些 shell,如果任何系统脚本依赖于 dash 独有的功能,它就会破坏系统。此外,它还要求用户具有 root 权限。

选项 (2) 意味着我必须找到另一个不会在任何地方发生冲突的符号。当然,某些 shell 可能会搞砸任何非字母的符号。

选项(3)意味着功能性下降太多

答案1

选项一相当简单。你只需要运行:

sudo dpkg-reconfigure dash

然后选择“否”。这将推/bin/sh回到/bin/bash

您可以手动执行此操作(删除链接,创建新链接),但这是官方方法

相关内容