声明在system()中的$ PATH在哪里

Wil*_*Jia 4 linux perl path sh

我的计算机上发生了一些奇怪的事情.我在/ usr/local/bin下安装了gperf.与我在这里问到的问题有关,在我的计算机上运行了一个perl脚本,其中包含gperf上的行system(),标志看起来像

perl文件:

system("gperf ...") == 0 || die "calling gperf failed: $?";
Run Code Online (Sandbox Code Playgroud)

然而,无论我怎么努力,gperf都不会运行并输出失败的消息

调试我试过像

system("echo \$PATH") == 0 || die "calling gperf failed: $?";

并发现它不包含/usr/local/bin/我安装我的gperf的位置,但只查看usr/bin它未安装的位置

所以这$PATH是错误的......所以我用Google搜索并看到system()与在文件中调用/ bin/sh相同,所以我尝试了/bin/sh, echo $PATH并且发现它包含/usr/local/bin/在我不相信的内容中.所以我的问题是系统()声明的$ PATH在哪里?为什么它与Bourne shell中的那个不同?

Gil*_*il' 7

PATH通过经推出命令中使用system是一样的人在perl脚本,通过访问$ENV{PATH}.这是PATHperl脚本从调用它的程序继承的,除非你在脚本中更改了它.

什么在咬你可能是你设置了PATH错误的配置文件.把它定义在~/.profile,/etc/profile或其他全系统的文件,而不是在外壳配置文件,如.bashrc.有关一般信息,请参阅此问题.

如果要在perl脚本中手动设置路径,可以使用类似的方法

$ENV{PATH} = "/usr/local/bin:$ENV{PATH}" unless ":$ENV{PATH}:" =~ m~:/usr/local/bin:~;
Run Code Online (Sandbox Code Playgroud)

但这可能是一个坏主意:在大多数情况下,您的脚本不应该修改运行该脚本的用户所选择的路径.

如果您PATH在阅读我链接的问题以及我的答案中链接的问题后找不到合适的位置,请在Unix和Linux上询问并确保说明操作系统的详细信息(分发,版本等)以及您如何登录(这是一个用户问题,而不是编程问题).