首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >system()中的$PATH在何处声明

system()中的$PATH在何处声明
EN

Stack Overflow用户
提问于 2012-08-30 07:43:13
回答 2查看 336关注 0票数 4

我的电脑上发生了一些奇怪的事情。我将gperf安装在/usr/local/bin下。关于问题I asked here,我在计算机上运行了一个perl脚本,其中包含gperf上的系统()行,其标志如下所示

perl文件:

代码语言:javascript
复制
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/shecho $PATH,结果发现它包含了/usr/local/bin/,这让我难以置信。所以我的问题是,声明的系统()的$PATH在哪里?为什么它与Bourne shell中的不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 07:51:59

通过system启动的命令所使用的PATH与可通过$ENV{PATH}访问的perl脚本中的perl相同。它是perl脚本从调用它的程序继承的PATH,除非您在脚本中对其进行了更改。

让您头疼的可能是您在错误的配置文件中设置了PATH。在~/.profile/etc/profile或其他系统范围的文件中定义它,而不是在.bashrc等外壳配置文件中定义。有关一些一般信息,请参阅this question

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

代码语言:javascript
复制
$ENV{PATH} = "/usr/local/bin:$ENV{PATH}" unless ":$ENV{PATH}:" =~ m~:/usr/local/bin:~;

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

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

票数 7
EN

Stack Overflow用户

发布于 2012-08-30 07:47:52

在使用BASH作为外壳的linux系统上,路径是在登录时从用户主目录中的.bash_profile文件设置的。您可以在文件末尾的/usr/local/bin目录中附加如下所示的行:

代码语言:javascript
复制
    PATH=$PATH:/usr/local/bin

另一种(可能更可靠的)方法是在系统调用中使用绝对路径,如下所示:

代码语言:javascript
复制
    system("/usr/local/bin/gperf")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12188024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档