首页 > 解决方案 > 让 bash 脚本在另一个 bash 脚本中输出一个字符串

问题描述

我有一个在bash-one.sh其中调用的 bash 脚本bash-two.sh。我想bash-two.sh在运行完成后导出一些字符串(该字符串取决于脚本内部发生的一些事情),以便bash-one.sh运行它的脚本以后可以使用它

我试图拥有bash-two.sh echo $BLAH,但这不起作用。我也尝试过export $BLAH没有运气...

标签: linuxbashmacoscommand-line

解决方案


还有另一种方法可以完成此任务。

在您的 bash2 脚本中,您可以应用如下输出重定向:

exec 3>&1 1>/dev/tty

当放置在脚本的开头时,此命令将保存 stdout 在文件描述符 3 中的位置,并将强制在屏幕上打印 stdout (fd 1)。

然后,您可以从 script2 回显您想要 fd3 的变量,如下所示:

echo "$BLAH" >&3

通过这种方式,您可以使用从 script1 捕获 script2 的输出

testvar="$(bash-two.sh)"

测试:

cat sc1.sh
exec 3>&1 1>/dev/tty
echo "hello from sc1"           #By default will be printed to >&1, redirected to /dev/tty=screen 
sc1var="this comes from sc1"
echo "$sc1var" >&3

localvar=$(bash sc1.sh)
hello from sc1            #forced to be printed on /dev/tty

echo "$localvar"
this comes from sc1

推荐阅读