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

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

私は.bashrcその前にいくつかの行があることがわかりました。export

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

他の人はそうではありません。

HISTSIZE=100000

exportまず、これが正しいか、2番目にで使用される規則は何であるかを知りたいです.bashrc

答え1

exportシェルで始まる他のプログラムで「表示」する必要がある変数だけが必要です。シェル自体内でのみ使用される変数は編集する必要はありませんexport

マニュアルページには次のように記載されています。

指定された名前は、後で実行されるコマンド環境に自動エクスポートするために表示されます。このオプションが与えられると、-f名前は関数を表します。名前が指定されていない場合、または-p このオプションが指定されている場合は、このシェルからエクスポートされたすべての名前のリストが印刷されます。この-nオプションを使用すると、エクスポートされた属性は各名前から削除されます。変数名の後に単語が続く場合、 =word変数の値は単語に設定されます。無効なオプションが見つかった場合、または名前の1つが有効なシェル変数名でない-f場合、または指定された名前が関数ではない場合、エクスポートは終了ステータス0を返します。

これは次のように証明できます。

$ 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"echoecho はシェルの一部なので、I を使用してその値をエコーし​​ます。
  • echo.sh次に、同じ基本機能を持つ小さなスクリプトを作成します。ちょうどechoですが、違い${MYVAR}は別のスクリプトなので、別のプロセスで実行されることです。
  • 新しいプロセスが継承されないため、呼び出し時にecho.sh何も出力されません。${MYVAR}
  • その後、キーワードを使用して${MYVAR}自分の環境にエクスポートします。export
  • 今すぐ同じタスクを再実行すると、環境からインポートされたコンテンツなので、コンテンツはecho.shエコーされます。${MYVAR}

したがって、あなたの質問に答えるには:

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

答え2

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。あなたの例では、 HISTTIMEFORMATbash自体はそれを使用しているので、エクスポートする必要はなく、エクスポートする必要があり MYSQL_HISTFILEますmysql。それ以外の場合はmysql表示できません。

関連情報