Unix如何判断一个程序是否可以执行

Unix如何判断一个程序是否可以执行

我正在编写一个脚本来创建源环境。处理 PATH 部分很容易。但是,当将程序的路径添加到 PATH 中时,我该如何检查程序是否可以正确执行?使用which是不够的,因为它只检查可执行文件的存在,而不是运行它。我现在得到的是检查程序的版本(即find -version)并检查返回消息是否包含“ command not found”。这并不理想。有没有更好的方法来做到这一点?

答案1

我认为没有理想的方法可以实现您的目标。正如 Martin 所说,您可以检查可执行位是否已设置,但这无法确认它是否真的会运行。

您可以做的一件事是尝试运行该程序,而不是从程序本身寻找特定文本,而是查看变量$?。这将返回程序的退出状态(通常为 0 表示正常)或(在我手头的 CentoOS 系统上)127 表示文件未找到,例如

find --version
if [[ $? == 127 ]]
then
    exit 1
fi

没有理想方法的原因是,退出状态 0 表示 OK 只是常规情况,如果程序运行但遇到错误,可能会返回不同的退出状态。这可能对您有用,直到某些程序运行并返回退出状态 127 来指示某些错误情况。

答案2

您可以使用-x 操作员测试文件上是否设置了可执行标志。但它不会告诉您可执行文件是否真的会运行。

相关内容