在 i686 / 32 位双 CPU 上,使用全新的 Debian Stretch 安装,我安装了 Octave 4.2.1 并./mytest
在为其提供执行权限后运行:
#!/bin/bash
./mytest.m
哪里test.m
读到
#!/usr/bin/octave
exit(0)
鉴于存储在 中的两个脚本~/tmp
,mytest
#!/bin/bash
if $1/mytest.m "$2"; then
echo "good"
else
echo "bad"
fi
和mytest.m
#!/usr/bin/octave
param = argv(){1};
if strcmp(param, "happyend")
exit(0)
else
exit(1)
end
运行tmp/mytest tmp happyend
将happyend
正常传递到mytest
,随后传递到mytest.m
,这会将信号 0 传递回mytest
,这将打印“good”。现在,如何从mytest.m
变量中获取返回(退出)代码? (上例中为 0)。
直观的选项
#!/bin/bash
result=$("$1"/mytest.m "$2")
if [ $result = 0 ]; then
echo "good"
else
echo "bad"
fi
行不通的。
答案1
要从命令获取返回(退出)代码,您需要保存该$?
值,也许保存到名为的变量中result
:
"$1/mytest.m" "$2"
result=$?
if [ "$result" -eq 0 ]; then
echo "good"
else
echo "bad"
fi
如果您只想将结果保存足够长的时间来测试它,请使用result
以下命令跳过该变量:
"$1/mytest.m" "$2"
if [ $? -eq 0 ]; then
echo "good"
else
echo "bad"
fi
但要小心$?
运行 mytest.m 后立即测试,因为任何后续命令都会他们的返回代码到$?
.
如果只想测试结果是否为零,则不需要将其视为整数。只需将命令本身视为条件即可。
if "$1/mytest.m" "$2"; then
echo "good"
else
echo "bad"
fi