我正在使用 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
所以你不必过度担心。