主脚本调用辅助脚本,辅助脚本调用C程序,不知道如何获取C程序的返回值

主脚本调用辅助脚本,辅助脚本调用C程序,不知道如何获取C程序的返回值

我有一个主脚本,它调用辅助脚本,如下所示:

 bash -ex $SOME_DIR/some_tester.sh

然后,帮助程序脚本调用 C 程序,如下所示:

./some_tester_in_C
echo $?
.
.
.other functions called

问题是对于初学者来说我无法从 C 程序中获取返回值。第二个问题是我的 C 程序结束后没有任何内容被执行,“其他函数”也没有被执行。

一个重要的事实是 C 程序与串行端口交互并将内容打印到终端。与外部设备的通信完成后,它会返回一个值,我需要在帮助程序脚本中捕获该值才能继续。

但是,如果我直接从终端调用帮助程序脚本而不使用主脚本,它就可以正常工作,我会得到 C 程序的返回值,并执行其余代码。

我尝试通过编写一个简单的脚本来重现该问题,该脚本调用另一个脚本,然后调用一个简单的 C 程序,我可以重现该问题。

set +x到处都有一些人认为这可能是问题所在,但我不这么认为。我想也许应该$?是别的东西?但我不太熟悉 Linux 脚本编写。一些见解会有所帮助。

答案1

由于您使用 运行帮助程序脚本bash -e,因此您将errexit在脚本中设置 shell 选项。如果一个简单命令(如 C 命令)以非零退出状态终止,则此 shell 选项将导致脚本终止。

如果您想捕获 C 程序的退出状态,请确保不是在启动帮助程序脚本或作为 AND/OR 列表的一部分运行程序时使用(即使设置了 且程序以非零退出状态退出,-e也可以避免终止脚本):errexit

status=0
./some_tester_in_C || status=$?

printf 'Exit status = %s\n' "$status"

相关内容