通过 shell 脚本将变量从父 shell 传递到子 shell

通过 shell 脚本将变量从父 shell 传递到子 shell

在父 shell (root) 上执行以下命令:

SESSION_RECORD=started

输出:

echo $SESSION_RECORD
started

但是,当我从 shell 脚本检查状态时,该值并未被分配。我知道它创建一个孩子并执行脚本,这就是为什么它不接受变量。

有没有办法可以将其从父 shell 导入到子 shell 中?我不想使用导出,因为根变量是动态的。

参考脚本:

#!/bin/bash

session=`echo $SESSION_RECORD`
echo $session
if [ "$session" == "started" ]
then
echo "screen records"
else
echo "screen not started"
fi

基本上,我的脚本应该检查变量的值,如果匹配,则应该进入循环并进一步执行命令。

变量的值SESSION_RECORD动态变化,因此我需要根据该值运行脚本。

答案1

导出变量时不需要设置变量的值。你可以做:

SESSION_RECORD=started
echo "Now some other stuff"
export SESSION_RECORD && ./myscript

它将把 的当前值导出SESSION_RECORD到您的脚本中。

答案2

如果您将脚本设为函数,那么它在执行时不会创建子 shell,因此访问变量应该可以正常工作。也许这对你有用?

例子:

$ cat test.sh
#!/bin/bash

function foo() {
  echo $foo
}
$ source test.sh
$ foo=5
$ foo
5
$ foo=4
$ foo
4
$

相关内容