访问父脚本中shell脚本返回的值

时间:2017-02-08 19:52:25

标签: linux bash shell

我正在尝试访问从父shell脚本调用的shell脚本返回的字符串。像这样:

ex.sh:

echo "Hemanth"

ex2.sh:

sh ex.sh

if [ $? == "Hemanth" ]; then
  echo "Hurray!!"
else
  echo "Sorry Bro!"
fi

有办法做到这一点吗?任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:2)

ex2.sh

上使用命令替换语法
valueFromOtherScript="$(sh ex.sh)"
printf "%s\n" "$valueFromOtherScript"
默认情况下,

echo会在字符串传递后输出换行符,如果您不需要在上面的变量中使用printf作为

printf "Hemanth"

在第一个脚本上。另外值得添加$?将仅返回上次执行的命令的退出代码。其值被解释为0是成功运行并且失败时非零。 NEVER 在尝试使用时会有一个字符串值。

答案 1 :(得分:0)

Bash脚本并不真正“返回”一个字符串。你想要做的是捕获脚本的输出(或外部程序或函数,它们在这方面的行为都相同)。

命令替换是捕获输出的常用方法。

captured_output="$(sh ex.sh)"

这会初始化变量captured_output,其中包含ex.sh输出的所有内容。好吧,并非完全如此。任何脚本(或命令或函数)实际上都有两个输出通道,通常称为“标准输出”(文件描述符编号1)和“标准错误”(文件描述符编号2)。从终端执行时,两者通常最终都在屏幕上。但如果需要,可以单独处理它们。

例如,如果您想要捕获所有输出(包括错误消息),您可以在命令之后添加“重定向”,告诉shell您希望标准错误转到与标准输出相同的位置。

captured_output="$(sh ex.sh 2>&1)"

如果省略该重定向,并且脚本输出标准错误的内容,那么它仍将显示在屏幕上,并且不会被捕获。

捕获输出的另一种方法是将其发送到文件,然后将该文件读回变量,如下所示:

sh ex.sh > output_file.log
captured_output="$(<output_file.log)"

脚本(或外部程序或函数)确实有一个称为返回码的东西,它是一个整数。按照惯例,值0表示“成功”,任何其他值表示异常执行(但不一定是失败):该返回代码的含义不是标准化的,它最终特定于每个脚本,程序或功能

执行终止后,此$?特殊shell变量中的返回代码可用。

sh ex.sh
return_code=$?
echo "Return code is $return_code"