Ubuntuでは `setx`に相当


9

Windowsにはsetx、ユーザーまたはシステム環境で環境変数を作成または変更するというPowerShellコマンドが用意されています。

Ubuntuには同様のコマンドがありますか、つまり、nanoまたはを使用せずに、viシステム全体で環境変数を追加または更新する1行だけです。

実装されたソリューション

追加/更新する1行

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正規表現の2番目の部分は空のままにしておきます。

sed -i.bak 's/variable=value//' /path/filename

設定されている環境変数に関心がある場合は、envコマンドを使用してそれらをリストする( set -o posix ; set ) | lessか、を使用できますsh -c set。3つすべてがさまざまな量の出力を( set -o posix ; set ) | less提供し、実際に設定されているほとんどの変数を返します。


1
代わりに( set -o posix ; set )言うのは簡単sh -c setです。これはshシンボリックリンクである場合でも機能しますbash(これは最近のUbuntuバージョンには通常ありません)。
ルスラン

@ruslan sh -c setは、システムに設定された実際にすべての環境変数を表示していません。ただし、それらのいくつかを表示する3番目の方法としてそれを含めます。
Videonauth 2017年

実際にsh -c setすべての環境変数を表示します。呼び出し元のシェルのシェル変数は表示されません が、シェル変数を除いて、exportそれらはそのシェルから実行するプロセスによって継承されることはありません。
Ruslan

あり、これまで編集に正当な理由/etc/environment?それは混乱への近道のようです。
Roger Lipscombe 2017年

@RogerLipscombeありがとう、それについてはよくわかりませんでしたが、変数を編集するための実行可能な場所ですが、混乱を招かないようにするために削除しました。
Videonauth

11

に直接相当するものはありませんがsetx /m、何をsetx /m行うかを達成する方法があります。

setx /mプットvariable=valueの中でHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment。非/ mの(すなわち、ユーザごとの)setx単に置きvariable=valueHKCU\Environment

あなたは特に「システム全体」を求めました。そのためには、変数と値のペアを/etc/environmentORまたはに追加します/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


7

コマンドラインで環境変数をエクスポートできますが、現在のプロセスとそのサブプロセスでのみ、既に開始されているプロセスの有効な環境には影響しません。したがって、実際には、環境変数を変更するときに再ログインが必要になることがよくあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.