假设以下脚本:
$ cat test.sh
#!/bin/bash
echo $PATH
有时候是这样的:
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ sudo ip netns exec blue echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ ./test.sh
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/<user>/.local/bin:/home/<user>/bin
$ sudo ip netns exec blue ./test.sh
/sbin:/bin:/usr/sbin:/usr/bin
为什么。它破坏了我的脚本生态系统,因为这意味着他们无法看到我的许多二进制文件。
在我测试过的两个发行版中,Fedora 24 是唯一一个可以做到这一点的发行版。 Ubuntu 14.04 的表现$PATH
与我预期的一样。
我尝试添加到脚本中
$ sudo ip netns exec blue PATH=$PATH
但它出错了,大概是因为PATH=etcetc
它不是真正的命令。
正确的做法是什么?
答案1
您始终可以做两件事: 使用命令的完全限定名称,这样就没有疑问了。在我的任何脚本中,我专门在脚本内设置了 PATH 变量,以避免对环境进行外部修改时出现问题(即独立于环境)。无论如何,这似乎是一个很好的一般做法。