首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >环境变量?

环境变量?
EN

Stack Overflow用户
提问于 2016-08-04 10:25:38
回答 1查看 2K关注 0票数 4

这个问题是特定于将cmake作为Android构建过程的一部分。

我在CMakeLists.txt内部使用AndroidStudio2.2预览7 (ubuntu),我可以使用:${ANDROID_NDK}访问Android路径

但我怎样才能进入:

  • 有环境变量吗?
  • 如果不可能,至少可以使用Android路径吗?

我已经尝试过使用$ENV{name_of_the_environment_variable_here},但它始终是空的,即使存在环境变量。我猜当gradle调用cmake时,它会以某种方式“隐藏”env var。

EN

回答 1

Stack Overflow用户

发布于 2022-01-30 04:19:17

我认为您不能使用$ENV,这只是变量的一个例子,因为它们是环境变量。但是,您应该能够键入env并按enter来获取当前设置的变量列表。然后,在列表中看到的,您可以通过键入$VARIABLE_NAME来调用,在它们之前使用一个命令来让他们做一些事情。echo $VARIABLE会把你的变量回音到stdout。

我不确定$ANDROID_SDK是如何设置的,如果它是安装过程的一部分,等等,但是通常您会在.profile.bash_profile.bashrc配置文件中设置用户环境变量。这些文件由shell按该顺序读取。在/etc/environment/etc/profile/etc/bash.bashrc中设置了系统范围的变量,但您可能不想混淆这些变量(大多数发行版鼓励在/etc/profile.local中进行辅助添加,但这是另一个答案)。

这些文件中使用哪一个并不特别重要,除非您想要做的事情与加载它们的顺序交互。通常,我会查找我添加的操作系统或其他东西设置变量的位置,并将它们放在这些变量附近。通过键入以下内容,可以找到设置环境变量的位置:

代码语言:javascript
复制
% for i in .profile .bash_profile .bashrc; do grep -H PATH $HOME/$i; done

(%是提示符,不要键入%)

。。这将遍历这3个文件,并显示是否在其中任何一个文件中设置了用户$PATH

Bash使用的是export ENV命令,而不是set ENV命令,后者来自于原来的sh,AFAIK仅是FreeBSD和pfSense等衍生工具的默认值。默认情况下,几乎所有其他操作系统都使用Bash,除了最近移动到zsh并使用export的MacOS和使用ksh (没有人使用OpenBSD)的OpenBSD。

如果您想验证您使用的是哪个shell,请输入echo $SHELLecho $0并按enter,它应该会通知您。

您可以通过在bash终端中键入此命令并按enter键,临时添加环境变量:

代码语言:javascript
复制
% export ANDROID_SDK_ROOT=/home/username/AndroidSDK

为了明确起见,这是一个示例路径,所以最好使用android文件所在的实际路径。但是,这个示例是Android最近安装时尝试使用的默认安装位置,所以如果您不确定它们在哪里,那么它可能是一个检查的好地方。

要对环境变量进行更永久的设置,请打开一个文本编辑器,并将上面的行添加到我在第一段中提到的配置文件中(它们将在您的$HOME文件夹中)。或者,您可以从提示符中运行它并将其自动添加到您的文件中:

代码语言:javascript
复制
% echo 'export ANDROID_SDK_ROOT=/home/username/AndroidSDK' >> $HOME/.bashrc

注意使用两个尖括号而不是一个,因为一个角括号将用一行覆盖整个文件。

如何访问任何环境变量?

如果您不确定哪个文件夹是$HOME,请尝试输入cd $HOME并点击enter --这将带您去那里。这就是访问环境变量的方式--在调用变量时使用一个命令,它的作用应该就像您已经输入了全部内容一样。

要访问环境变量,输入echo $NAME_OF_VARIABLE并将其回显到屏幕。如果您想搜索前面提到的设置环境变量的三个配置文件,可以像前面那样使用grep,只需更改搜索字符串即可。例如(在$HOME中):

代码语言:javascript
复制
% grep SDK_ROOT .bashrc .profile .bash_profile

或者,可以键入env来列出所有当前设置的变量,并通过将输出传递到grep命令来筛选它们:

代码语言:javascript
复制
% env | grep SDK

如果您只想列出所有的set变量和围绕整个程序的根,只需键入env,而不是将其连接到grep (grep是一个过滤器)。

最后,我将给出我的$ANDROID_SDK_ROOT $ANDROID_SDK$SDK_ROOT变量在.bashrc中的一个例子--我注意到在安装这些工具时,它们都使用了这三个变量(这不是很有趣吗?)

代码语言:javascript
复制
% grep ANDROID .bashrc
   export ANDROID_SDK=$HOME/development/Android/SDK
   export ANDROID_SDK_ROOT=$HOME/development/Android/SDK
export PATH=$PATH:$ANDROID_SDK:$JAVA_HOME:$ANDROID_SDK/cmdline-tools/latest/bin:$ANDROID_SDK/build-tools/32.0.0:$ANDROID_SDK/emulator:$ANDROID_SDK/emulator/bin64:$ANDROID_SDK/tools:$ANDROID_SDK/tools/bin:$ANDROID_SDK/extras:$ANDROID_SDK/platform-tools:$HOME/development/AndroidStudio/bin
export ANDROID_STUDIO=$HOME/development/AndroidStudio

% grep SDK_ROOT .bashrc
   export SDK_ROOT=$HOME/development/Android/SDK
   export ANDROID_SDK_ROOT=$HOME/development/Android/SDK

希望能回答一些问题,很抱歉花了这么长时间才给你一个答复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38764787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档