为什么即使 /bin 目录在 PATH 中,"which" 也会错过命令?
Why does "which" miss commands even when the /bin directory is in PATH?
背景
我目前正在 cshell (company default if you were wondering) 中测试一个 perl 脚本 运行,它将被 Jenkins 作业使用。作为该脚本的一部分,我正在检查 gradle 是否存在于路径中。
我将 gradle 目录添加到路径中,然后保存路径的本地版本,如下所示:
$ENV{PATH} .= ":/vobs/common/gradle-X.X/bin";
my $myPATH = $ENV{ "PATH" };
然后我使用 which command inside a system 命令进行完整性检查,如下所示:
system ("/bin/env PATH=$myPath which gradle" );
返回的错误表明我正确添加了路径,但由于某种原因它无法在其中找到 gradle,如下所示:
which: no gradle in (<standard directories>:/vobs/common/gradle-X.X/bin)
注意:我提到cshell的另一个主要原因是这两个问题不适用于我的问题,因为它们是bash 相关:
Why 'whereis' and 'which' don't show me location of command?
How do I clear Bash's cache of paths to executables?
问题
尽管知道 /bin 目录存在于路径中,为什么 "which" 仍会错过命令?
您的脚本可能没有足够的权限访问 /vobs/common/gradle-X.X/bin
。
背景
我目前正在 cshell (company default if you were wondering) 中测试一个 perl 脚本 运行,它将被 Jenkins 作业使用。作为该脚本的一部分,我正在检查 gradle 是否存在于路径中。
我将 gradle 目录添加到路径中,然后保存路径的本地版本,如下所示:
$ENV{PATH} .= ":/vobs/common/gradle-X.X/bin";
my $myPATH = $ENV{ "PATH" };
然后我使用 which command inside a system 命令进行完整性检查,如下所示:
system ("/bin/env PATH=$myPath which gradle" );
返回的错误表明我正确添加了路径,但由于某种原因它无法在其中找到 gradle,如下所示:
which: no gradle in (<standard directories>:/vobs/common/gradle-X.X/bin)
注意:我提到cshell的另一个主要原因是这两个问题不适用于我的问题,因为它们是bash 相关:
Why 'whereis' and 'which' don't show me location of command?
How do I clear Bash's cache of paths to executables?
问题
尽管知道 /bin 目录存在于路径中,为什么 "which" 仍会错过命令?
您的脚本可能没有足够的权限访问 /vobs/common/gradle-X.X/bin
。