Bri*_*erg 4 bash shell perl csh tcsh
在csh,tcsh,bash,perl(等)中你可以进行与之相同的测试(不一定使用相同的语法):
test -e PATH; # Does PATH exist
test -f PATH; # Is PATH a file
test -d PATH; # is PATh a directory
...
Run Code Online (Sandbox Code Playgroud)
是否存在类似的结构来检查二进制文件是否在您的路径中?(也许是否存在别名,甚至内置存在)
显然,这可以用以下形式完成:
#!/usr/bin/env bash
C=COMMAND;
test $(which $C) -o $(alias $C) && "$C exists"
Run Code Online (Sandbox Code Playgroud)
或其他shell /脚本语言中的类似内容.
问题不在于是否可以测试程序,命令等是否存在.问题是内置测试是否存在.
从技术上讲,如果您只是在寻找当前的PATH东西,那么唯一真正的解决方案是第二个代码块的第一部分:
which $C
Run Code Online (Sandbox Code Playgroud)
which是唯一一个真正符合你当前PATH实际要求的人,因为它whereis会在路径之外搜索:
whereis...尝试在标准Linux位置列表中找到所需的程序.从
whereis(1)
和alias当然有你的shell环境中无关,与实际的可执行文件,而是命令别名
所以,实际上,你已经有了正确的方法,只要注意你知道这whereis可能不是对这一系列测试的有用补充.