【问题标题】:How to set [Bash on Ubuntu on Windows] [environment variables] from [windows path]?如何从 [windows 路径] 设置 [Bash on Ubuntu on Windows] [环境变量]?
【发布时间】:2017-12-20 05:09:18
【问题描述】:

尝试在 Windows 上使用 samza.apache.org/startup/hello-samza/0.7.0/ 和 Bash

它会运行

bin/grid bootstrap

流动的代码在哪里

if [ -z "$JAVA_HOME" ]; then
  if [ -x /usr/libexec/java_home ]; then
    export JAVA_HOME="$(/usr/libexec/java_home)"
  else
    echo "JAVA_HOME not set. Exiting."
    exit 1
  fi
fi

报错

JAVA_HOME not set. Exiting.

当我运行时在 CMD 上

echo %JAVA_HOME%

我明白了

C:\Program Files (x86)\Java\jdk1.8.0_102\

我想将路径数据导入bash

【问题讨论】:

  • 您是否直接在 Bash shell 上安装了 Java?它不会识别路径C:\...。要在 Windows 上的 Ubuntu 上进行 Bash,路径将是 /mnt/c/... 当您在 bash shell 中运行 echo $JAVA_HOME 时会发生什么?
  • 如何在 Bash shell 上直接安装 Java? echo $JAVA_HOME 给出一个空行
  • 如果你想为 Ubuntu 安装 JDK - stackoverflow.com/questions/36478741/…
  • 看起来像是一种共享变量的方式,其中包括路径转换是在 Insider Build 17063 中引入的:blogs.msdn.microsoft.com/commandline/2017/12/22/…

标签: bash ubuntu command-line windows-10 windows-subsystem-for-linux


【解决方案1】:

我会尝试export JAVA_HOME="/mnt/c/Program Files (x86)/Java/jdk1.8.0_102" 在 bash shell 中设置 JAVA_HOME 变量。

更新(响应您的编辑):

我不建议尝试将 Windows 路径自动导入到 Windows 上的 Ubuntu 上的 Bash,因为必须将路径转换为 ​​bash shell 可以理解(\/C:\ 到 @ 987654327@ 等等),因为并非您可能要参考的所有工具都适用于 Windows 和 Linux。相反,使用apt-get 在 Bash shell 上安装您需要的东西(您不需要使用sudo,因为 BUW 在根 shell 中加载)。 Java 可能可以像上面那样引用,但大多数东西你需要在 Ubuntu 上单独安装。

【讨论】:

  • 成功了!但现在它要求 git 路径?我的主要问题:有没有办法在 bash 启动时自动从窗口路径为 bash 设置路径变量
  • 如果您还没有安装 git,您可能需要在 bash shell 上安装。 (apt-get update 然后apt-get git)将变量添加到您的~/.bashrc 文件中(语法相同) - 。然后,要么重启 shell,要么输入source ~/.bashrc 重新加载环境变量。
  • apt-get 将安装一个新实例,我有“/mnt/c//Program Files/Git/cmd/git.exe”和“C:\Users\mohamad\.bashrc”之类的这个gist.github.com/Elrashid/a16f74449c108d2336aec21abe80fa59怎么加?
  • .exe 文件不能在 Linux 上运行。我建议您在 Windows 上的 Ubuntu 上的 Bash 上单独安装 git。请参阅上面的编辑。
  • wslpath 是你在 Wsl2 中的(新)朋友,所以没有理由从 Win 手册中导入 Wsl 的路径。
【解决方案2】:

作为一个快速的解决方案,我创建了一个 powershell 脚本,它将

  1. 获取所有windows环境变量
  2. 将路径分隔符更改为/
  3. C: 更改为/mnt/c
  4. 输出export 命令每个环境变量一行

    Get-ChildItem Env: | % {"export $($_.Name)=`"$($_.Value.Replace('\', '/').Replace('C:', '/mnt/c'))`""}
    

现在,您需要做的就是在 Powershell 中运行此脚本,复制输出并将其粘贴到 Windows 上的 WSL/Ubuntu 中以填充环境变量。您也可以将所有这些命令放在一个.sh 文件中并使用 bash 执行它。

这是一个粗略的解决方案,但这对我有用。我愿意接受有关改进这一点的建议。

【讨论】:

    【解决方案3】:

    我的路径环境变量似乎已经有我的 Windows 路径。但是您可以在 Windows 上从 Ubuntu 运行 Windows 程序。所以你可以得到环境变量或者你喜欢的任何东西。

    export PATH=$PATH:`/mnt/c/Windows/System32/cmd.exe -/C "echo %PATH%"`
    

    不建议使用 Cygwin(许可、注册表损坏等)。但下面应该工作。 run 被记录为从它给你的 bash shell 运行 windows 程序。

    export PATH=$PATH:`run /mnt/c/Windows/System32/cmd.exe -/C "echo %PATH%"`
    

    【讨论】:

    • 我认为这是最简单的答案,因为它不需要 PowerShell。我要补充一点,在 Windows 命令行中,%PATH% 是正确的变量引用,而不是 $PATH(这是 Linux 变量引用)。
    • 您可能需要附加| sed -e 's/;/:/g' 或其他字符串处理以用冒号替换分号。如果有比 sed 更好的建议(也许与 zsh 兼容?),请发表评论。
    • @yuyu5 这在windows cmd 下不起作用,不知道你为什么认为这是一个cmd。
    • 考虑使用 wslpath 来转换路径。否则,您的解决方案将无济于事。
    【解决方案4】:

    通过在系统变量环境中设置 WSLENV,这对我有用。

    系统变量

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多