web-dev-qa-db-ja.com

ターミナルを使用してエクスポートパスを実行すると、どのファイルに保存されますか?

たとえば、export export PATH=$PATH:$GOROOT/bin:$GOPATH/binまたはGOPATH=~/workspace/me/goを実行すると、どのファイルに追加されますか?

2
Kaigo

変数をexportすると、どこのファイルにも追加されません

単に変数を割り当てるのではなく、exportの効果は、シェルのすべての子プロセスの環境に変数を渡すことです。それ以外は何もしません。シェルの構成ファイルは変更されません。シェルとそのすべての子プロセスが終了すると、エクスポートされた変数はなくなります!最初のシェルの子ではない新しいシェルを開くと、そのシェルは変数を記憶しません。

実際、PATHは既に環境変数であるため、export PATHを使用する必要はありません。既にエクスポートされています。子プロセスの環境に自動的に渡され、変更すると、子プロセスもその変更を継承します。

これは、環境変数を出力するコマンドであるprintenvを使用して確認できます。

$ foo=bar; echo $foo             # set a variable   
bar                              # the Shell knows it
$ printenv foo                   # but it's not in the environment...
$ export foo; printenv foo       # export the variable and check again
bar                              # there it is!
$ foo=new; printenv foo          # change the variable
new                              # the change is inherited
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ PATH=/usr/bin; printenv PATH   # printenv is in /usr/bin so keep that!
/usr/bin                         # the change was inherited

(このシェルから開始する新しいシェルは、私が台無しにしたPATH変数を継承するため、PATHを取り戻すには、シェルを終了する必要があります。source /etc/environment...)

変数を永続的に設定する場合は、シェルの構成ファイルのいずれかに自分で追加する必要があります。

私の知る限り、PATHがUbuntuの/etc/environmentにデフォルトで設定されている唯一の変数です。 /etc/environmentを編集してPATHを設定するnotをお勧めします。または、そうする場合は、元のファイルのバックアップを作成するよう注意してください。元のPATHを復元する方法(どこかに書き留めているか、素晴らしい記憶がない限り)。また、コンテンツに対して展開が実行されないことに注意してください。したがって、$PATH$GOPATH、または~ではなく、フルパスを使用する必要があります。そのようなものを書く場合、それらは文字通りPATHにあり、PATHが文字通り$PATH:~/workspace/me/goである場合、フルパスを使用しないとコマンド(シェルに組み込まれているものを除く)を実行できません。

また、.bashrcにPATHを設定することはお勧めしません。すべてのインタラクティブなBashシェルが.bashrcを読み取り、シェルから新しいシェルを開始することなどは非常に一般的だからです...

PATH="$PATH:$HOME/foo"

.bashrcで、/home/user/fooがPATHに複数回追加されることがわかります。シェルがシェルを開始するたびに、PATHが再び拡張されます。これにより、特に多くのパスを追加した場合、最終的に速度が低下する可能性があります。また、インタラクティブBashシェルのみが~/.bashrcを読み取るため、Bash以外のシェルを使用する場合、またはスクリプトを実行する場合、インタラクティブBashシェルの子プロセスではないため、この変数はありません。

代わりに、~/.profileに行を追加してPATHを拡張することをお勧めします。このファイルはログインシェルによってのみ読み取られます。通常、セッションにログインしたときに1回だけ読み取られるため、PATHは1回だけ追加され、すべてのシェルは、インタラクティブなBashシェルだけでなく、そこに設定された環境変数を継承します。通常、このファイルに環境変数を追加します。したがって、テキストエディタで~/.profileを開き、次のような行を追加できます。

GOPATH="$HOME/workspace/me/go"
PATH="$PATH:$GOPATH/bin"

いずれかのディレクトリに特殊文字が含まれている場合は、示されているとおりにパスを引用することをお勧めします(名前に特殊文字を含まないディレクトリを作成することもお勧めしますが、二重引用符(~)はチルダの展開を抑制するため、/home/userのショートカットとして"を使用することはできませんが、パラメーター展開が実行され、$HOME$HOMEになるため、代わりに/home/userを使用できます。

編集後、ファイルを保存して終了し、ログアウトして再度ログインするか、source ~/.profileを実行すると、PATHには常に/home/user/workspace/me/goが含まれます。

2
Zanna

シェルのカスタマイズは通常、$HOME/.bashrcに編集されます。これは、起動する各シェルによってsourcedです。 man bashを読んでください。

ところで、あなたはGOPATH定義を持っている必要があります

 GOPATH=~/workspace/me/go  

GOPATHを使用する前に

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

また、GOROOTの定義はどこですか?

0
waltinator