【问题标题】:`echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile`, what each part of the command actually mean/does? [closed]`echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile`,命令的每个部分实际上是什么意思/作用? [关闭]
【发布时间】:2016-08-14 11:17:02
【问题描述】:

要在 mac 上设置 JAVA_HOME,只需在终端中输入echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile

但是,我只是想知道是否有人可以解释命令的每个部分的实际含义/作用?

【问题讨论】:

  • 我相当肯定这其中的大部分内容都被令人作呕所覆盖。我很难相信您在使用 echoexport 和 shell 重定向时遇到了麻烦。一点点努力就应该告诉你他们做了什么。

标签: java macos terminal


【解决方案1】:

~/.bash_profile 是私有的,即对于特定用户,bash shell 的启动文件。换句话说,当你打开一个shell(命令行)时,shell程序读取这个文件来知道应该对initialize the shell environment执行什么。

JAVA_HOME 是各种程序用来查找 Java 二进制文件和其他 Java 相关文件的环境变量。您可以通过在命令行中执行 export JAVA_HOME=$(/usr/libexec/java_home) 来设置变量,但它只会在该 shell 会话期间有效。

因此,为了使JAVA_HOME 变量在会话之间保持不变,您可以通过使用echo 和重定向将export 命令附加到此文件,在~/.bash_profile 中自动设置它。 echo 打印一条消息,>> 重定向输出,在本例中为 ~/.bash_profile 文件。请注意双大于号 (>>) -- 它表示 append,而不是 >,表示 覆盖

为了“按原样”处理echo 命令的参数而不对其进行解释,该参数用双引号括起来并且转义了美元符号(即\$)。

综上所述,执行命令后,您应该在~/.bash_profile 文件底部看到以下行(运行cat ~/.bash_profile 以查看文件内容):

export JAVA_HOME=$(/usr/libexec/java_home)

$(command) 语法用于command substitution,即/usr/libexec/java_home 将被执行并将其输出分配给JAVA_HOME

【讨论】:

  • 非常感谢您的精彩解释!我只是想知道在哪里可以找到有关所有这些符号和命令的信息?一些时间命令可能会变得非常复杂和令人困惑:(
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2018-12-16
  • 2018-09-13
相关资源
最近更新 更多