在终端中能打印值的环境变量,在脚本里打印却为空?

发布于 2022-09-01 22:46:03 字数 287 浏览 17 评论 0

看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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

jJeQQOZ5 2022-09-08 22:46:03
export ANDROID_NDK_ROOT
sh test.sh

环境变量只在当前进程有效,传递到子进程,需要export

櫻之舞 2022-09-08 22:46:03

总算搞明白了,这个问题还挺有意思,也是之前一个不留心引起。
ANDROID_NDK_ROOT我是放在.bashrc里的,如下:

NDK_ROOT=/home/jk/sdk/android-ndk-r10e
ANDROID_NDK_ROOT=$NDK_ROOT
PATH="$NDK_ROOT:$PATH"

每次打开一个新的终端,.bashrc都会被执行,上面是定义了ANDROID_NDK_ROOT这个变量,并不是export一个环境变量,所以在终端里是可以使用$ANDROID_NDK_ROOT获取值的。
而如果使用sh test.sh,这个脚本是在终端的子进程中执行的,它不能获取父进程终端的ANDROID_NDK_ROOT变量是正常的,注意,这里是变量,如果需要获取的话,可以让test.sh在终端所在的进程执行,但要使用:

. ./test.sh
或
source ./test.sh

所以,回到最初的目的,是想暴露ANDROID_NDK_ROOT为环境变量,供所有脚本和终端使用,这就必须在前面加export:

export NDK_ROOT=/home/jk/sdk/android-ndk-r10e
export ANDROID_NDK_ROOT=$NDK_ROOT
export PATH="$NDK_ROOT:$PATH"

这样才是设置环境变量,因此,sh test.sh才能正常打印ANDROID_NDK_ROOT

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文