`setx` еквівалент в Ubuntu


10

У Windows є команда powerhell, 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

Відповіді:


12

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


1
Замість ( set -o posix ; set )цього простіше сказати sh -c set. Це буде працювати, навіть якщо shце посилання на bash(що зазвичай не використовується в сучасних версіях Ubuntu).
Руслан

@ruslan sh -c setне відображає насправді всі змінні середовища, встановлені в системі. Однак я включу це як третій спосіб показати деякі з них.
Videonauth

Насправді sh -c setпоказані всі змінні середовища . Він просто не відображає змінні оболонки оболонки, що викликає, але вони ніколи не успадковуються процесом, який ви запускаєте з цієї оболонки, якщо ви не є exportними.
Руслан

Чи є коли-небудь поважна причина для редагування /etc/environment? Здається, це ярлик до плутанини.
Роджер Ліпскомб

@RogerLipscombe Дякую, я не був впевнений у цьому, це все-таки життєздатне місце для редагування змінних у, але я його вийняв заради того, щоб не викликати плутанини.
Videonauth

11

Не існує прямого еквівалента setx /m, але є способи досягти того, що setx /mробить.

setx /mставить variable=valueв HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Non- / м (тобто для кожного користувача) setxпросто ставить variable=valueв HKCU\Environment.

Ви спеціально просили "загальносистемний". Для цього вам слід додати пару змінних значень до або /etc/environmentАБО /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


7

Ви можете експортувати змінні середовища в командному рядку, але це не вплине на ефективне середовище у вже запущених процесах, лише в поточному процесі та його підпроцесах. Тож на практиці вам часто потрібно переробити, змінюючи змінні середовища.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.