重新输出变量

时间:2014-11-25 23:18:44

标签: bash

我的脚本是RO,我无法修改它。它设置并导出一些变量。

这个脚本并不完美,所以我在上面编写了包装器。但我有一个问题。我如何重新导出通过原始脚本导出的变量?

在bash中,我可以这样做:

. original_script

我可以访问导出的变量。 但是当我在我的脚本中执行此操作时,我无法在脚本外部访问此导出的变量(因为它们已从子shell导出)。

如何以简单的方式从orignal脚本重新导出变量? 一些变量包含空格,“和新行。

2 个答案:

答案 0 :(得分:1)

你必须.(又名source)一直向下。你必须找到你的包装器,你的包装器必须找到原始脚本:

以下是一个显示此作品的测试案例:

$ cat original 
echo "Running original"
export VAR='hello world'

$ cat wrapper 
echo "Running wrapper"
. original

当交互式shell来源时,该变量可用并仍然导出:

$ echo "$VAR"
(no output)

$ . wrapper
Running wrapper
Running original

$ echo "$VAR"
hello world

答案 1 :(得分:0)

“原始”:

$ cat original.sh
#!/bin/bash
export VAR1=value1
VAR2='value 2'
export VAR2

包装器:

$ cat wrapper.sh
#!/bin/bash
. original.sh

结果:

$ echo "$VAR1 $VAR2"

$ . original.sh
$ echo "$VAR1 $VAR2"
value1 value 2

unset VAR1 VAR2

$ ./wrapper.sh
$ echo "$VAR1 $VAR2"

$ . ./wrapper.sh
$ echo "$VAR1 $VAR2"
value1 value 2

我总是通过./script运行脚本,从不运行。 (或来源)(仅适用于个人档案文件:例如〜/ .bash_profile等)。 但是我可以通过正常方式调用脚本来重新导出变量吗? (./script)

我添加了别名:

alias wrapper='. wrapper.sh'

它有效。我不知道更好的解决方案。