Linux 让bash脚本在另一个bash脚本中输出字符串
我有一个bash脚本Linux 让bash脚本在另一个bash脚本中输出字符串,linux,bash,macos,command-line,Linux,Bash,Macos,Command Line,我有一个bash脚本bash one.sh,它在里面调用bash two.sh。我希望bash-one.sh在运行完后导出一些字符串(该字符串取决于脚本内部发生的一些事情),以便运行它的bash-one.sh脚本以后可以使用它 我试图让bash two.shecho$BLAH,但那不起作用。我也尝试过让它导出$BLAH,但也没有运气…感谢@Barmar提供的简单解决方案!我只是简单地获取了bash two.sh的 即 击打一号。sh: #!/bin/bash source ./bash-two
bash one.sh
,它在里面调用bash two.sh
。我希望bash-one.sh
在运行完后导出一些字符串(该字符串取决于脚本内部发生的一些事情),以便运行它的bash-one.sh
脚本以后可以使用它
我试图让bash two.sh
echo$BLAH
,但那不起作用。我也尝试过让它导出$BLAH,但也没有运气…感谢@Barmar提供的简单解决方案!我只是简单地获取了bash two.sh的
即
击打一号。sh:
#!/bin/bash
source ./bash-two.sh $1
echo "${TEST_VARIABLE}"
#!/bin/bash
TEST_VARIABLE=$1
猛击2.sh:
#!/bin/bash
source ./bash-two.sh $1
echo "${TEST_VARIABLE}"
#!/bin/bash
TEST_VARIABLE=$1
“子进程无法直接在父进程中设置变量。导出只在一个方向上进行,从父进程到子进程。”-Barmar还有另一种方法可以完成此任务
在bash2脚本中,可以应用输出重定向,如下所示:
exec 3>&1 1>/dev/tty
当该命令置于脚本开头时,将保存文件描述符3中标准输出的位置,并将强制在屏幕上打印标准输出(fd 1)
然后,您可以从script2中回显要发送到fd3的变量,如下所示:
echo "$BLAH" >&3
通过这种方式,您可以使用
testvar="$(bash-two.sh)"
测试:
听起来您正在查找语法output=$(bash two.sh)
-@picklick-hmm。不确定我是否在跟踪。。如果bash one
将bash two.sh
分配给output
,那么在bash two.sh
中应该写入什么才能在变量运行完成后正确导出所需的变量?无论bash two
在stdout上放置什么,都将分配给output
,请参见中的manual@picklerick啊,我明白了。我不想要整个stdout,因为文件输出了很多东西,我只想在脚本执行完毕时导出一个变量,这样我就可以在bash one
中引用它。。这可能吗?如果使用source
命令执行bash two.sh
,它将在与bash one.sh
相同的shell进程中执行,因此其所有变量赋值都将可见。