在终端中能打印值的环境变量,在脚本里打印却为空?
看shell执行情况:
jk@kglb:~$ echo $ANDROID_NDK_ROOT
/home/jk/sdk/android-ndk-r10e
jk@kglb:~$ cat test.sh
#!/bin/sh
echo $ANDROID_NDK_ROOT
jk@kglb:~$ sh test.sh
jk@kglb:~$
环境变量ANDROID_NDK_ROOT在终端中能打印出来,但放在脚本里却打印为空,不得其解。
使用环境:bash, Ubuntu 14.04.3 LTS
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
环境变量只在当前进程有效,传递到子进程,需要export
总算搞明白了,这个问题还挺有意思,也是之前一个不留心引起。
ANDROID_NDK_ROOT我是放在.bashrc里的,如下:
每次打开一个新的终端,.bashrc都会被执行,上面是定义了ANDROID_NDK_ROOT这个变量,并不是export一个环境变量,所以在终端里是可以使用$ANDROID_NDK_ROOT获取值的。
而如果使用sh test.sh,这个脚本是在终端的子进程中执行的,它不能获取父进程终端的ANDROID_NDK_ROOT变量是正常的,注意,这里是变量,如果需要获取的话,可以让test.sh在终端所在的进程执行,但要使用:
所以,回到最初的目的,是想暴露ANDROID_NDK_ROOT为环境变量,供所有脚本和终端使用,这就必须在前面加export:
这样才是设置环境变量,因此,sh test.sh才能正常打印ANDROID_NDK_ROOT