web-dev-qa-db-ja.com

.bashrcでのエクスポートの使用

私の.bashrcで、いくつかの行の前にexportがあることに気付きました。

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"

他の人はしませんが、

HISTSIZE=100000

最初にこれが正しいのか、次にexport.bashrcで使用するためのルールは何かと思います。

50
Martin Vegter

シェルで起動する他のプログラムによって「見られる」必要がある変数については、exportのみが必要ですが、シェル自体の内部でのみ使用される変数は、exportedである必要はありません。 。

これはmanページが言うことです:

The  supplied  names are marked for automatic export to the environ‐
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
Shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =Word,
the  value  of  the variable is set to Word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid Shell variable name, or -f is supplied with a
name that is not a function.

これは次のように示されます。

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh

$ export MYVAR="value-exported"
$ ./echo.sh
value-exported

説明:

  • 最初に${MYVAR}MYVAR="value"のシェル変数に設定します。 echoを使用するエコーはシェルの一部なので、値をエコーできます。
  • 次に、echo.shを作成します。これは基本的に同じことをする小さなスクリプトで、${MYVAR}をエコーするだけですが、別のスクリプトであるため、異なるプロセスで実行されるという違いがあります。
  • 新しいプロセスはecho.shを継承しないため、${MYVAR}を呼び出すと何も出力されません。
  • 次に、exportキーワードを使用して環境に${MYVAR}をエクスポートします
  • 同じecho.shを再度実行すると、環境から取得するため、${MYVAR}の内容がエコーされます。

だからあなたの質問に答えるには:

エクスポートする必要があるかどうかにかかわらず、変数が使用される場所によって異なります。

58
replay

環境変数 にはexportを使用します。環境変数はオペレーティングシステムの機能です。環境変数は子プロセスによって継承されます。シェルで設定すると、このシェルによって開始されたすべてのプログラムで使用できます。多くのアプリケーションまたはシェル以外の特定のアプリケーションによって使用される変数は、環境変数です。次に、一般的な環境変数の例をいくつか示します。

  • HOME —ユーザーのホームディレクトリを示します。ユーザーのホームディレクトリには、ユーザーごとの構成ファイルが配置されています。ユーザーごとの構成ファイルを読み取る、またはユーザーのホームディレクトリの場所を知る必要があるプログラムで使用されます。
  • PATH —他のプログラムを起動するための実行可能ファイルの場所を示します。別のプログラムを開始する必要があるすべてのプログラムによって使用されます。
  • LD_LIBRARY_PATH —動的ライブラリファイルの場所を示します。動的にリンクされたすべての実行可能ファイルによって使用されます。
  • EDITORVISUAL —エディターが必要なときに実行するプログラムを示します。テキストエディタを起動する必要があるすべてのプログラムで使用されます。
  • DISPLAYXAUTHORITY — X11サーバーへの接続方法を示します。 X11クライアント(つまり、GUIプログラム)によって使用されます。
  • LESSlessの実行時にオプションが自動的にオンになります。 lessによって使用されます。
  • http_proxy —使用するWebプロキシを示します。ほとんどのWebブラウザーで使用されます。

シェル変数にはexportを使用しないでください。シェル変数は、プログラミング言語としてのシェルの機能です。シェル変数は、それらが設定されているシェル内でのみ使用されます。シェルによって起動されたプログラムには意味がありません。シェル変数は、他のシェル状態と同様に、サブシェルが作成されるときに複製されます。一般的なシェルに意味を持つシェル変数の例をいくつか示します。

  • PS1 —各コマンドの前に表示するプロンプト。
  • IFS —引用符で囲まれていない変数展開とコマンド置換で単語を区切る文字。
  • HISTFILE —シェルがコマンド履歴を書き込むファイル。

シェルで使用される変数に加えて、ほとんどのシェルスクリプトは内部目的で変数を使用します。

ほとんどの環境変数(例:PATH)はセッション全体で意味があり、~/.profileまたは同様のファイルで設定する必要があります。特定のシェルにのみ意味のある変数(PS1など)は、~/.bashrc~/.zshrcなどのシェル固有のファイルに設定する必要があります。参照 すべてのシェルによって読み取られる「.bashrc」に相当するファイルはありますか?

Bash内部変数の場合、exportは必要ありません。あなたの例からHISTTIMEFORMATはbash自体によって使用され、エクスポートは必要ありませんMYSQL_HISTFILEmysql用であり、エクスポートが必要です。それ以外の場合、mysqlはそれを表示しません。

3
Zelda