从 shell 脚本中,使用参数执行另一个脚本并获取其返回码

从 shell 脚本中,使用参数执行另一个脚本并获取其返回码

在 i686 / 32 位双 CPU 上,使用全新的 Debian Stretch 安装,我安装了 Octave 4.2.1 并./mytest在为其提供执行权限后运行:

#!/bin/bash
./mytest.m

哪里test.m读到

#!/usr/bin/octave
exit(0)

鉴于存储在 中的两个脚本~/tmpmytest

#!/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 happyendhappyend正常传递到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

相关内容