Вы можете сделать это, просто объявив его как новый в командной строке или повторно объявив его. Например, если вы хотите добавить ~/testfolder
к своей переменной path, вы можете просто ввести ее в свой текущий терминал (это только пример):
PATH="$HOME/testfolder:$PATH"
Это, конечно, изменит его только на время, когда вы сказали, что терминальная сессия открыта. Обратите внимание на $
использование здесь, вы оставляете его для объявления, но если вы хотите отобразить его, вам нужно добавить его, $
чтобы расширить его содержимое.
Если вы хотите объявить их более продолжительными и общими, вы можете добавить их в свой ~/.bashrc
(только для вас) файл или в /etc/bash.bashrc
(в масштабе всей системы), например, если вы хотите, чтобы они учитывались только для вас или для всех пользователей. Другой вариант - добавить его в свой .profile
файл (только для себя), где он будет жизнеспособным с момента входа в систему. Это можно сделать, echo
например, если вы уверены, что эта переменная еще не установлена или если вы создаете новые (только пример):
echo "variable=value" >> /path/filename
Однако если вы хотите отредактировать файл за пределами своего пользовательского каталога, то есть тот случай, когда вы хотите отредактировать /etc/bash.bashrc
его, sudo
поэтому вам нужно просто использовать «здесь документ», так как это не сработает, вместо этого используйте строку, как показано ниже:
echo "variable=value" | sudo tee -a /path/filename
Если переменная уже существует, вы можете изменить ее с помощью sed
команды (также только в качестве примера):
sed -i.bak 's/variable=value/variable=new-value/' /path/filename
Это отредактирует переменную в файле, но создаст ее резервную копию до редактирования. Если вы изменяете файлы вне вашей пользовательской директории с помощью sed, вам нужно использовать их sudo
в большинстве случаев, поэтому строка будет выглядеть так:
sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename
Удаление переменной из файла также может быть сделано sed
, просто оставьте вторую часть регулярного выражения пустой:
sed -i.bak 's/variable=value//' /path/filename
Если вас интересует, какие переменные среды установлены, вы можете использовать env
команду для их перечисления ( set -o posix ; set ) | less
или sh -c set
. Все три дают различное количество продукции, ( set -o posix ; set ) | less
возвращая большинство переменных, которые фактически установлены.
( set -o posix ; set )
этого проще сказатьsh -c set
. Это будет работать, даже еслиsh
это символическая ссылкаbash
(что обычно не в современных версиях Ubuntu).sh -c set
не показывает все переменные среды, установленные в системе. Однако я включу это как третий способ показать некоторые из них.sh -c set
показывает все переменные среды . Он просто не показывает переменные оболочки вызывающей оболочки, но они никогда не наследуются процессом, который вы запускаете из этой оболочки, если только вы не используетеexport
их./etc/environment
? Похоже, это путь к путанице.Прямого эквивалента нет
setx /m
, но есть способы добиться того, чтоsetx /m
делает.setx /m
ставитvariable=value
вHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
. Non- / м (то есть для каждого пользователя)setx
просто ставитvariable=value
вHKCU\Environment
.Вы специально просили «всей системы». Для этого вы бы добавили пару переменная-значение либо в
/etc/environment
OR/etc/profile.d/<yourfile>
. Первый оценивается с помощью pam, а второй - с помощью/bin/sh
. Таким образом, в/etc/profile.d/<yourfile>
, вы бы добавилиvariable=value; export variable
. (Баш также позволяетexport variable=value
). Ибо/etc/environment
ты бы добавилvariable=value
.Эквивалентами для каждого пользователя являются
~/.pam_environment
и~/.profile
.Смотрите также: https://help.ubuntu.com/community/EnvironmentVariables
источник
Вы можете экспортировать переменные среды в командной строке, но это не повлияет на эффективную среду в уже запущенных процессах, только в текущем процессе и его подпроцессах. Поэтому на практике вам часто нужно повторно регистрироваться при изменении переменных среды.
источник