在外壳脚本之间导出变量

| 我有两个独立运行的脚本。 首先让我们说脚本A计算一些值。我想从称为B的其他脚本中回显这些值。这些脚本不会互相调用。我使用了export关键字,但是没有用。我怎样才能做到这一点?     
已邀请:
如果我理解了需求,那么就不能在同一个子shell中简单地独立执行两个脚本,而又不能相互调用或不需要这样的外部文件或管道: 假设这是您的script1.sh
#!/bin/bash
# script1.sh: do something and finally
export x=19
在这里,我们您的script2.sh
#!/bin/bash
# script2.sh: read value of $x here
echo \"x=\"${x}
像这样在同一个子外壳中调用它们
(. ./script1.sh && ./script2.sh)
输出:
x=19
    
 mkfifo /tmp/channel

 process_a.sh > /tmp/channel&
 process_b.sh < /tmp/channel&

 wait
当然,您也可以只在需要时阅读一行。 在bash中有coproc,这也可能是您想要的。此页面上的随机示例
# let the output of the coprocess go to stdout
{ coproc mycoproc { awk \'{print \"foo\" $0;fflush()}\' ;} >&3 ;} 3>&1
echo bar >&${mycoproc[1]}
foobar
ksh具有类似的功能,显然     
将每个脚本视为一个函数:函数A计算一些值并将其返回。它不知道谁会调用它。函数B接受一些值并回显它。它不在乎谁创造了这种价值。因此,脚本A为:
#!/bin/sh
# a.sh: Calculate something and return the result
echo 19
脚本B是:
#!/bin/sh
# b.sh: Consume the calculated result, which passed in as $1
echo The result is $1
使它们可执行:
chmod +x [ab].sh
现在,我们可以在命令行上将它们粘合在一起:
$ b.sh $(a.sh)
The result is 19
从语义上讲,b.sh没有调用a.sh。您调用了a.sh并将其结果传递给b.sh。     
您不能读取第三个文件,例如具有常见导出变量的settings.sh吗?
# common.sh
export MY_PATH=/home/foo/bar/
export VERSION=42.2a
并在A和B
source common.sh
中加载这些值。 请注意,在这种情况下可能不需要导出。     
您可以将值回显到文件,然后其他脚本可以读取它们。如果要将其用作某物的参数,请使用反撇号:
echo `cat storedvalue`
请注意,如果两个脚本同时运行,则可能会发生并发问题,这可能会导致很少出现的,看起来神秘的错误。     
实际上,您只需要
source
,就可以跳过
export
前缀。 我的用例是特定于环境的设置文件,例如: 在main_script.sh中
THIS_DIR=`dirname $0`
source $THIS_DIR/config_vars.sh
# other commands
在config_vars.sh中
LOCAL_ROOT=\"$HOME/folder/folder\"
REMOTE_USERNAME=\'someuser\'
BACKUP_FOLDER=\"$LOCAL_ROOT/folder\"
# etc.
    

要回复问题请先登录注册