不要在路径中使用波浪号
我正在使用nono代理沙箱工具,它给我发出警告:沙箱可以写入的PATH条目:~/.local/bin/,这看起来很可疑。换句话说,在你的~/.bashrc或~/.zshrc中执行以下操作:export PATH = " $PATH :~/.local/bin/" 将不会将~(波浪号)展开为主目录路径(或$HOME),因为波浪号到主目录的展开只发生在未加引号的输入中,正如bash文档所说:如果一个词以未加引号的波浪号字符(‘~’)开头,所有到第一个未加引号的斜杠(…)之前的字符都被视为波浪号前缀。……Bash立即检查每个变量赋值中紧跟在‘:’或第一个‘=’后面的未加引号的波浪号前缀,并在这些情况下执行波浪号扩展。…… 所以,我们没有添加/home/<user>/.local/bin/到PATH中,而是得到./~/.local/bin/被添加到PATH中。为了解决这个问题,我们可以执行以下操作:export PATH = " $PATH : $HOME /.local/bin/" 注意,未加引号的版本export PATH=$PATH:~/.local/bin在Bash和Zsh中实际上是可以使用的,因为波浪号扩展同样在=后和每个:后进行。但依赖这一点是不稳定的,因为例如,空格会破坏变量赋值。问题也可以在这里看到:$ ls -la total 0 drwxr-xr-x@ 2 dc staff 64 Oct 2 13:37 . drwxr-x---+ 105 dc staff 3360 Oct 2 13:37 .. $ mkdir -p ./~/.local/bin/ $ printf '#include <stdio.h> int main() { puts("hello"); }' > a.c ; gcc a.c -o ./~/.local/bin/kek $ PATH = "~/.local/bin/" kek hello $ tree -f . ├── ./~ │ └── ./~/.local │ └── ./~/.local/bin │ └── ./~/.local/bin/kek └── ./a.c 4个目录,2个文件 正如我们所看到的,kek二进制文件是从./~/.local/bin/找到并执行的——主目录从未参与。检查你的PATH 你可以快速检查是否存在这个问题:$ echo " $PATH " | grep -- '~' 或者,查看每个条目单独一行:$ echo " $PATH " | tr ':' ' ' | grep '~' ~/.local/bin/ 如果它打印出任何内容,去修复你的.bashrc / .zshrc / .profile,并用$HOME替代~ :)。顺便说一句,感谢nono工具对此发出警告——尽管警告可以更详细(PR正在进行中)。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡