我有一个第三方公司的脚本无法正常工作。它应该启动一个进程。可执行文件路径及其参数作为第一个参数 ( ) 传递$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。要获取后台进程的实际返回代码,您可能需要查看此回复。