我的电脑上发生了一些奇怪的事情。我将gperf安装在/usr/local/bin下。关于问题I asked here,我在计算机上运行了一个perl脚本,其中包含gperf上的系统()行,其标志如下所示
perl文件:
system("gperf ...") == 0 || die "calling gperf failed: $?";但是,无论我如何努力,gperf都不会运行并输出失败的消息
为了进行调试,我尝试了下面这样的方法
system("echo \$PATH") == 0 || die "calling gperf failed: $?";
我发现它没有包含我安装gperf的位置的/usr/local/bin/,而只是查看没有安装它的usr/bin。
所以$PATH是错的..。所以我用谷歌搜索了一下,发现system()等同于在文件中调用/bin/sh,所以我尝试了/bin/sh和echo $PATH,结果发现它包含了/usr/local/bin/,这让我难以置信。所以我的问题是,声明的系统()的$PATH在哪里?为什么它与Bourne shell中的不同?
发布于 2012-08-30 07:51:59
通过system启动的命令所使用的PATH与可通过$ENV{PATH}访问的perl脚本中的perl相同。它是perl脚本从调用它的程序继承的PATH,除非您在脚本中对其进行了更改。
让您头疼的可能是您在错误的配置文件中设置了PATH。在~/.profile、/etc/profile或其他系统范围的文件中定义它,而不是在.bashrc等外壳配置文件中定义。有关一些一般信息,请参阅this question。
如果想要在perl脚本中手动设置路径,可以使用类似于
$ENV{PATH} = "/usr/local/bin:$ENV{PATH}" unless ":$ENV{PATH}:" =~ m~:/usr/local/bin:~;但这可能不是一个好主意:在大多数情况下,您的脚本不应该修改运行该脚本的用户所选择的路径。
如果你在阅读了我链接的问题和我的答案中链接的问题后,在系统上找不到正确的位置来设置PATH,请在Unix & Linux上询问,并确保说明您的操作系统的详细信息(发行版、版本等)。以及如何登录(这是一个用户问题,而不是编程问题)。
发布于 2012-08-30 07:47:52
在使用BASH作为外壳的linux系统上,路径是在登录时从用户主目录中的.bash_profile文件设置的。您可以在文件末尾的/usr/local/bin目录中附加如下所示的行:
PATH=$PATH:/usr/local/bin另一种(可能更可靠的)方法是在系统调用中使用绝对路径,如下所示:
system("/usr/local/bin/gperf")https://stackoverflow.com/questions/12188024
复制相似问题