На этот вопрос уже есть ответ:
Я использую WSL, и я новичок в Linux. Я установил переменную среды в / etc / environment
под названием TESTVAR. Эта переменная требуется для некоторых проектов, и она отлично работает, когда я запускаю Bash напрямую.
Но если я запускаю команду Linux, используя командную команду Windows, например: bash.exe -c "printenv"
, переменная не существует. Поэтому я не могу запускать свои команды с помощью cmd, иначе я получу много ошибок, потому что переменная содержит важный путь.
Что мне нужно делать?
Спасибо.
Есть несколько методов для bash в Windows
См. https://github.com/Microsoft/WSL/issues/24
По сути, вы добавляете их в ~ / .bashrc
Если это не работает, напишите ваш .bashrc
Я не знаю, почему / etc / environment не работает.
РЕДАКТИРОВАТЬ: Оригинальный ответ ниже для исторических комментариев. Пантера ответ лучше. Ваш файл ~/.bashrc
, который обрабатывается при каждом открытии терминала. В нем поместите команду:
MY_VARIABLE="some text"
Затем вы можете использовать echo $MY_VARIABLE
, чтобы увидеть его настройку.
Я открыл новое окно терминала Bash в WSL, которое работает точно так же в 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
Так что вы не должны быть излишне заинтересованных сторон.
Похоже, что если вы хотите использовать переменные среды Linux (Ubuntu), вы должны выполнить следующую команду:
bash --login -c "printenv"
Вы можете увидеть некоторые обсуждения, относящиеся к этой проблеме, в этом ссылка
Старый пост, но если кто-то спотыкается здесь от Google ...
Начиная с версии Windows 17134, добавление флага -i
к команде bash
будет запускать команду оболочки как «интерактивную», которая вызовет полную среду linux, включая все настроенные файлы входа в систему (.bashrc, .bash_aliases и т. д.), которые могут содержать определения среды или переменных.
Исходный вопрос из Windows cmd должен иметь желаемый эффект: bash -ic printenv
См. Также: bash -ic 'man bash'