4

在 csh、tcsh、bash、perl(等)中,您可以进行同等的测试(不一定使用相同的语法):

test -e PATH; # Does PATH exist
test -f PATH; # Is PATH a file
test -d PATH; # is PATh a directory
...

是否存在用于检查二进制文件是否在您的路径中的类似结构?(也许是否存在别名,甚至内置)

显然,这可以通过以下形式来完成:

#!/usr/bin/env bash
C=COMMAND;
test $(which $C) -o $(alias $C) && "$C exists"

或其他外壳/脚本语言中的类似内容。

问题不在于是否可以测试程序、命令等是否存在。问题在于是否存在内置测试。

4

3 回答 3

7

从技术上讲,如果您只是在当前PATH寻找东西,那么唯一真正的解决方案是您的第二个代码块的第一部分:

which $C

which是唯一真正符合您当前PATH实际要求的,因为whereis将在路径外搜索:

whereis... 尝试在标准 Linux 位置列表中找到所需的程序。

whereis(1)

当然与alias实际的可执行文件无关,而是与您的 shell 环境中的别名命令有关

所以,真的,你已经有了正确的方法,只是要小心你知道这whereis可能对测试链没有帮助。

于 2011-04-27T16:33:52.360 回答
3

要不就:

type -P awk   # returns the first matched binary called 'awk' in current PATH
于 2011-04-28T13:26:46.243 回答
2

另一种解决方案是

find $(echo $PATH|tr : \ ) -maxdepth 0 -executable -name Executable

其中 Executable 是所需应用程序的名称。例如:

find $(echo $PATH|tr : \ ) -maxdepth 0 -executable -name awk

返回

/usr/bin/awk
/bin/awk
于 2011-04-27T21:02:44.650 回答