我的脚本是RO,我无法修改它。它设置并导出一些变量。
这个脚本并不完美,所以我在上面编写了包装器。但我有一个问题。我如何重新导出通过原始脚本导出的变量?
在bash中,我可以这样做:
. original_script
我可以访问导出的变量。 但是当我在我的脚本中执行此操作时,我无法在脚本外部访问此导出的变量(因为它们已从子shell导出)。
如何以简单的方式从orignal脚本重新导出变量? 一些变量包含空格,“和新行。
答案 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'
它有效。我不知道更好的解决方案。