В Windows есть команда powershell под названием setx
, которая создает или изменяет переменные среды в пользовательской или системной среде.
Есть ли в Ubuntu аналогичная команда, т. Е. Не с помощью nano
или vi
, а всего лишь одной строки для добавления или обновления переменной среды в масштабе всей системы.
Одна строка для добавления / обновления
grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment
Вы можете сделать это, просто объявив его как новый в командной строке или повторно объявив его. Например, если вы хотите добавить ~/testfolder
к вашей переменной пути, вы просто можете ввести ее в свой текущий терминал (это только пример):
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
возвращает большинство переменных, которые фактически установлены.
Вы можете экспортировать переменные среды в командной строке, но это не повлияет на эффективную среду в уже запущенных процессах, только в текущем процессе и его подпроцессах. Поэтому на практике вам часто нужно повторно регистрироваться при изменении переменных среды.
Не существует прямого эквивалента setx /m
, но есть способы выполнить то, что делает setx /m
.
setx /m
помещает variable=value
в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
. Не / m (то есть на пользователя) setx
просто помещает variable=value
в HKCU\Environment
.
Вы специально спрашивали «для всей системы». Для этого вы должны добавить пару переменная-значение либо в /etc/environment
ИЛИ в /etc/profile.d/<yourfile>
Первый оценивается с помощью pam, а второй - с помощью /bin/sh
. Таким образом, в /etc/profile.d/<yourfile>
вы бы добавили variable=value; export variable
. (bash также позволяет export variable=value
). Для /etc/environment
вы бы добавили variable=value
.
Эквивалентами для каждого пользователя являются ~/.pam_environment
и ~/.profile
.
См. Также: https://help.ubuntu.com/community/EnvironmentVariables