.bashrcでエクスポートを使用する


45

私は.bashrcいくつかの行がexportそれらの前にあることに気付きました

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

一方、他の人はそうではありません

HISTSIZE=100000

最初にこれが正しいかどうか、そして次にでを使用exportするためのルールが何であるか疑問に思い.bashrcます。

回答:


53

exportシェルで起動する他のプログラムから「見える」変数だけが必要で、シェル自体の内部でのみ使用されるものはexport編集する必要はありません。

これはマニュアルページに書かれていることです:

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エコーはシェルの一部であるため、Iを使用するとその値をエコーできます。
  • 次に、作成しますecho.sh。これは基本的に同じことを行う小さなスクリプトです${MYVAR}が、エコーするだけですが、違いは、別のスクリプトであるため、異なるプロセスで実行されることです。
  • echo.sh新しいプロセスは継承しないため、呼び出すと何も出力されません${MYVAR}
  • 次に${MYVAR}exportキーワードを使用して環境にエクスポートします
  • 同じものをecho.shもう一度実行すると${MYVAR}、環境から取得されるため、コンテンツがエコーされます

あなたの質問に答えるために:

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


17

環境変数に使用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」に相当するファイルはありますか?を参照してください


3

bash内部変数の場合、必要ありませんexport。あなたの例から HISTTIMEFORMATはbash自体によって使用され、エクスポートが必要としない MYSQL_HISTFILEためであるmysqlとニーズがそうエクスポートすることをmysqlそれを見ていません。

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