私の.bashrc
で、いくつかの行の前にexport
があることに気付きました。
export HISTTIMEFORMAT="%b-%d %H:%M "
...
export MYSQL_HISTFILE="/root/.mysql_history"
他の人はしませんが、
HISTSIZE=100000
最初にこれが正しいのか、次にexport
を.bashrc
で使用するためのルールは何かと思います。
シェルで起動する他のプログラムによって「見られる」必要がある変数については、export
のみが必要ですが、シェル自体の内部でのみ使用される変数は、export
edである必要はありません。 。
これは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}
の内容がエコーされます。だからあなたの質問に答えるには:
エクスポートする必要があるかどうかにかかわらず、変数が使用される場所によって異なります。
環境変数 にはexport
を使用します。環境変数はオペレーティングシステムの機能です。環境変数は子プロセスによって継承されます。シェルで設定すると、このシェルによって開始されたすべてのプログラムで使用できます。多くのアプリケーションまたはシェル以外の特定のアプリケーションによって使用される変数は、環境変数です。次に、一般的な環境変数の例をいくつか示します。
HOME
—ユーザーのホームディレクトリを示します。ユーザーのホームディレクトリには、ユーザーごとの構成ファイルが配置されています。ユーザーごとの構成ファイルを読み取る、またはユーザーのホームディレクトリの場所を知る必要があるプログラムで使用されます。PATH
—他のプログラムを起動するための実行可能ファイルの場所を示します。別のプログラムを開始する必要があるすべてのプログラムによって使用されます。LD_LIBRARY_PATH
—動的ライブラリファイルの場所を示します。動的にリンクされたすべての実行可能ファイルによって使用されます。EDITOR
、VISUAL
—エディターが必要なときに実行するプログラムを示します。テキストエディタを起動する必要があるすべてのプログラムで使用されます。DISPLAY
、XAUTHORITY
— X11サーバーへの接続方法を示します。 X11クライアント(つまり、GUIプログラム)によって使用されます。LESS
— less
の実行時にオプションが自動的にオンになります。 less
によって使用されます。http_proxy
—使用するWebプロキシを示します。ほとんどのWebブラウザーで使用されます。シェル変数にはexport
を使用しないでください。シェル変数は、プログラミング言語としてのシェルの機能です。シェル変数は、それらが設定されているシェル内でのみ使用されます。シェルによって起動されたプログラムには意味がありません。シェル変数は、他のシェル状態と同様に、サブシェルが作成されるときに複製されます。一般的なシェルに意味を持つシェル変数の例をいくつか示します。
PS1
—各コマンドの前に表示するプロンプト。IFS
—引用符で囲まれていない変数展開とコマンド置換で単語を区切る文字。HISTFILE
—シェルがコマンド履歴を書き込むファイル。シェルで使用される変数に加えて、ほとんどのシェルスクリプトは内部目的で変数を使用します。
ほとんどの環境変数(例:PATH
)はセッション全体で意味があり、~/.profile
または同様のファイルで設定する必要があります。特定のシェルにのみ意味のある変数(PS1
など)は、~/.bashrc
や~/.zshrc
などのシェル固有のファイルに設定する必要があります。参照 すべてのシェルによって読み取られる「.bashrc」に相当するファイルはありますか?
Bash内部変数の場合、export
は必要ありません。あなたの例からHISTTIMEFORMAT
はbash自体によって使用され、エクスポートは必要ありませんMYSQL_HISTFILE
はmysql
用であり、エクスポートが必要です。それ以外の場合、mysql
はそれを表示しません。