我正在编写一个脚本来创build源环境。 处理PATH部分很容易。 虽然我应该如何检查一个程序是否可以在PATH中joinpath时正确执行? 使用which是不够的,因为它只是检查可执行文件的存在,而不是运行它。 我现在得到的是检查程序的版本(即find -version ),并检查返回消息是否包含“ command not found ”。 这并不理想。 有一个更好的方法吗?
我不认为有一个理想的方式来做你想做的事情。 正如马丁说,你可以检查可执行位已设置,但不会确认它将实际运行。
你可以做的一件事是尝试运行程序,而不是从程序本身寻找特定的文本,看看$? variables。 这将返回程序的退出状态(通常为OK)或(在CentoOS系统上,我必须手动)127找不到文件,例如
find --version if [[ $? == 127 ]] then exit 1 fi
没有理想的方法的原因是OK的退出状态为0只是常规的,如果程序运行但遇到错误,程序可能返回不同的退出状态。 这可能会为你工作,直到运行,并返回退出状态127,以指示一些错误的情况。
您可以使用-x 运算符来testing是否在文件上设置了可执行标志。 它不会告诉你,如果可执行文件将实际上运行。