![如何在我的所有脚本中自动执行“命令-p”?](https://linux22.com/image/227706/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%88%91%E7%9A%84%E6%89%80%E6%9C%89%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E2%80%9C%E5%91%BD%E4%BB%A4-p%E2%80%9D%EF%BC%9F.png)
我想使用command -p
以下命令执行脚本中的所有命令:
command -p pwd
因为我可能会在脚本中执行一些命令,其名称被其他一些自定义用户脚本使用,在这种情况下,该command
命令会导致执行系统命令而不是用户的命令(这是一个友好的解释,如果您想要从技术上了解幕后真正发生的事情,请查阅手册页)这就是我想要的。
好吧,这样我就不必每次command -p
在脚本中调用任何命令时都在行首逐字输入“”,有没有办法command -p
在脚本中定义全局的行为?
答案1
PATH=$(command -p getconf PATH)${PATH+:$PATH}
会放APOSIX 搜索路径位于 $PATH 之前。
您会发现上面的命令给出的示例如下command
标准实用程序的规范。
为了使其工作,需要从 POSIX shell 运行它才能支持command -p
.
在支持多个版本标准的系统上,例如在 Solaris 上,/use/xpg6/bin 中的命令(包括getconf
)其行为与 /use/xpg4/bin 中的行为不同,您将获得的命令可能取决于关于初始环境。
$PATH 的值是否会影响 shell 内置函数的行为也取决于 shell。
答案2
您的 shell 会在其中查找可执行文件PATH
来执行。您可以从PATH
变量中排除用户可写目录,以获得更优雅的解决方案。所以在脚本的开头添加:
PATH='/usr/local/bin:/usr/bin:/bin:/usr/sbin/:/sbin/:/usr/local/games:/usr/games'