2016-12-06 65 views
1

我们有一个名为source.sh的shell脚本,用于导出构建所需的许多ENV变量。环境变量不可用于shell脚本中的下一个命令

我想通过在脚本中运行source.sh来访问这些ENV变量,但即使在运行之后,我也无法访问后续命令的ENV变量。

我的脚本看起来很相像:

#!/bin/bash 

sh source.sh 
cd $ROOT_VOS 
make 

但这里CD $ ROOT_VOSis没有发生

+0

顺便说一句,还有待使之成为一个环境变量VS常规shell没有很好的理由变量和POSIX约定指定要用于操作系统和shell的变量的全大写变量名的名称空间,小写名称保留供应用程序使用。 (形式上,这是为环境变量指定的,但是设置常规shell变量会覆盖任何类似命名的环境变量,所以公约必须在两个地方应用)。 –

回答

1

sh source.sh

...运行source.shsh(实际上是一个独立的副本,因为你的母贝是bash,孩子是sh,它不只是一个“单独的副本”,它是一个完全不同的解释器)。当这个单独的解释器退出时,局部变量和其他处理本地状态的变化都消失了。 (环境变量由子进程继承;它们不会传播到树上父项)。


相反,使用:

# POSIX-compliant: execute every command in source.sh in the current shell 
. source.sh 

......或者......

# bash-specific, perhaps more-readable, synonym for the same 
source source.sh 
相关问题