WSL Bash 的工作原理与 Ubuntu Bash 相同

WSL Bash 的工作原理与 Ubuntu Bash 相同

我正在使用 WSL,并且对 Linux 还不太熟悉。我设置了一个/etc/environment名为 TESTVAR 的环境变量。此变量对于某些项目是必需的,当我直接运行 Bash 时,它工作得很好。

但是如果我使用 Windows cmd 运行 Linux 命令,例如:bash.exe -c "printenv",则该变量不存在。因此我无法使用 cmd 运行命令,否则我会收到许多错误,因为该变量包含一条重要路径。

我需要做什么?

谢谢。

答案1

在 Windows 上有几种方法可以执行 bash

https://github.com/Microsoft/WSL/issues/24

基本上你将它们添加到 ~/.bashrc

如果这不起作用,请发布你的 .bashrc

我不知道为什么 /etc/environment 不起作用。

答案2

这是旧帖子,但如果有人从谷歌偶然发现这里……

从 Windows 版本 17134 开始,将-i标志添加到bash命令将以“交互式”方式运行 shell 命令,这将调用完整的 Linux 环境,包括设置的任何登录点文件(.bashrc、.bash_aliases 等),这些文件可能包含环境或变量定义。

对于原始问题,从 Windows cmd 执行此操作应该会产生预期的效果: bash -ic printenv

也可以看看:bash -ic 'man bash'

答案3

WSL Bash 的工作原理与 Ubuntu Bash 相同

编辑:以下是历史评论的原始答案。Panther 的答案是最好的。~/.bashrc每次打开终端时都会处理的文件。在其中放置命令:

MY_VARIABLE="some text"

然后您可以使用它echo $MY_VARIABLE来查看它的设置。


我在 WSL 中打开了一个新的 Bash 终端窗口,其工作方式与 Ubuntu 16.04 中相同,只是启动画面略有不同:

在此处输入图片描述

如您所见,一旦设置了环境变量,就可以正常调用它。

也许你更大的问题在于你的命令:

bash.exe -c "printenv"

在我的 Windows 10 桌面快捷方式之一上,我使用:

C:\Windows\System32\bash.exe -c "cd && DISPLAY=0:0 /mnt/e/bin/lock-screen-timer"

也许你那里遗漏了一些东西???


回复评论

为了回应您对其他人的评论,我的系统与您一样,揭示了:

rick@alien:/mnt/c/Windows/System32$ echo $TERM,$NAME,$HOME
xterm-256color,alien,/home/rick

所以你不必过度担心。

答案4

看来,如果您想使用您的 Linux(Ubuntu)环境变量,您必须运行以下命令:

bash --login -c "printenv"

您可以在此处查看与该问题相关的一些讨论关联

相关内容