Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 让bash脚本在另一个bash脚本中输出字符串_Linux_Bash_Macos_Command Line - Fatal编程技术网

Linux 让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脚本
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进程中执行,因此其所有变量赋值都将可见。