/usr/bin/which 返回神秘错误“which: no ls in ((null))”

Jon*_*man 4 linux c

我正在编写一个简单的shell程序。当我在 mac osx 和 ubuntu 中将 /usr/bin/which 与我的 shell 一起使用时,它运行正常。当我在 Red Hat Enterprise Linux Client 6.3 版(圣地亚哥)上使用完全相同的命令时,出现以下错误:“which: no ANYCOMMANDHERE in ((null))”。

对此有任何直觉吗?我什至找不到错误的含义(如果显示我的来源会有所帮助,请告诉我)。

编辑:我的路径是(从外壳内部):

$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

谢谢,乔恩

Jen*_*ens 5

当相应的参数是空指针时,字符串(null)被一些 C 库替换为 printf 的%s(字符串)转换说明符的参数,例如

 char *path = 0; /* This would normally be = getenv("PATH"). */
 printf ("which: no foobar in (%s)\n", path);
Run Code Online (Sandbox Code Playgroud)

您的 PATH 环境变量似乎未设置或未导出。在这些情况下getenv("PATH")返回 0。作为最后一种可能性,您的which实用程序可能有一个强大的错误)。

如果你说它工作正常export PATH吗?


Cra*_*sta 0

听起来你的PATH环境变量是问题所在。例如,如果你which asdf正常运行,你会得到类似的信息:

which: no asdf in (/usr/local/bin:/usr/bin:...)
Run Code Online (Sandbox Code Playgroud)

所以看起来你的 PATH 环境变量类似于(NULL). 另一种可能性是您的 RHEL 机器上的 which 二进制文件有问题。