我正在尝试访问从父shell脚本调用的shell脚本返回的字符串。像这样:
ex.sh:
echo "Hemanth"
ex2.sh:
sh ex.sh
if [ $? == "Hemanth" ]; then
echo "Hurray!!"
else
echo "Sorry Bro!"
fi
有办法做到这一点吗?任何帮助将不胜感激。
谢谢。
答案 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"