尝试在没有执行权限的情况下执行二进制文件时显示错误

尝试在没有执行权限的情况下执行二进制文件时显示错误

我有一个第三方公司的脚本无法正常工作。它应该启动一个进程。可执行文件路径及其参数作为第一个参数 ( ) 传递$1给脚本:

[...]
echo "Good ´ol printf-debugging in 2022"
echo $1
$1 &> /dev/null &
ExitStatus=$?
PID=$!
echo "PID = " $PID
echo "ExitStatus (before wait) = " $ExitStatus
wait $PID
echo "ExitStatus (after wait) = " $ExitStatus
[...]

这打印:

Good ´ol printf-debugging in 2022
/opt/daq-logger/daq-logger /media/sdcard/daq
PID =  493
ExitStatus (before wait) =  0

输出在那里停止(但命令完成)。

更改$1 &> /dev/null &$1 &不会改变输出。使用 just $1,输出在打印路径后停止(并且命令也完成)。

经过一个小时的摸索,我注意到所涉及的二进制文件缺少执行权限:rwxr--r--

为什么没有显示错误?我如何让它显示错误?如果进程实际上没有启动,为什么脚本会获取 PID?嗯……显然。如果确实启动了一个进程,那么它及其 stderr 会发生什么(即为什么我看不到它)?

答案1

紧接您的线路之后

echo "Good ´ol printf-debugging in 2022"

你应该添加

COM=`echo "${1}" | awk '{ print $1}' `
test -x "${COM}" || ( echo "\t ERROR:  '${COM}' is not executable! ; exit 1 )

这将阻止调用脚本在没有必要的先决条件的情况下继续进行。

另外,请注意该行

ExitStatus=$?

不捕获 $1 的退出状态,但是将该命令行置于后台的成功/失败,根据经验,它几乎总是 0。要获取后台进程的实际返回代码,您可能需要查看此回复

相关内容