`setx` эквивалент в Ubuntu

В 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
9
задан 29 November 2017 в 08:23

3 ответа

Вы можете сделать это, просто объявив его как новый в командной строке или повторно объявив его. Например, если вы хотите добавить ~/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 возвращает большинство переменных, которые фактически установлены.

12
ответ дан 29 November 2017 в 08:23

Вы можете экспортировать переменные среды в командной строке, но это не повлияет на эффективную среду в уже запущенных процессах, только в текущем процессе и его подпроцессах. Поэтому на практике вам часто нужно повторно регистрироваться при изменении переменных среды.

7
ответ дан 29 November 2017 в 08:23

Не существует прямого эквивалента 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

11
ответ дан 29 November 2017 в 08:23

Другие вопросы по тегам:

Похожие вопросы: