/etc/environment
、、、など、複数の設定ファイルを読み込んだり実行したりして、環境変数が設定されることを知っています。/etc/profile
~/.profile
~/.bashrc
しかし、私が読んだときこのブログ投稿、環境をインポートせずにログインしていない対話型bashシェルを起動するには、次のコマンドを試しました。
osboxes@osboxes:~$ env -i bash
PATH
新しいシェルに入った後、変数を確認して次のような結果を得ました。
osboxes@osboxes:/home/osboxes$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
私が知る限り、この非ログインインタラクティブシェルはorを読み取ったりインポートしたりせず、合計/etc/environment
のみを提供します。/etc/profile
~/.profile
/etc/bash.bashrc
~/.bashrc
PATH
それでは、このシェルセットの変数はどのように構成されていますか?読み取りまたはソースとして使用する特定のファイルはありますか?
答え1
printenv
PATHに値がないことを確認してください。何かを見つけたら、おそらくあなたのものから来たのでしょう~/.bashrc
。空の場合、Bash自体によって設定されます。シェルの起動時にPATH値が見つからない場合は、値を設定します。 PATHがなければ、ほとんど何も機能しないからです。
ソースコードでこれがどのように行われるかを確認できます(Bash 4.4のソースコードを見ています)。
存在するvariables.c
:
/* Now make our own defaults in case the vars that we think are
important are missing. */
temp_var = set_if_not ("PATH", DEFAULT_PATH_VALUE);
#if 0
set_auto_export (temp_var); /* XXX */
#endif
存在するconfig-top.h
表示された PATH と一致する定義を見つけることができます。
/* The default value of the PATH variable. */
#ifndef DEFAULT_PATH_VALUE
#define DEFAULT_PATH_VALUE \
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
#endif
.
私はPATHを入れることが誤って仕事をするのは簡単なので、一般的に悪い習慣と見なされると思います!
答え2
PATH
Bourne Again シェルマニュアルに記載されているように、シェル変数を初期化する環境変数がなく、起動PATH
スクリプトでシェル変数が設定されていない場合、シェル変数はデフォルト値を持ちます。
マニュアルによると、「インストールされたシステム管理者bash
」によって値が異なります。実際、ソースからBourne Againシェルをコンパイルした人がどのオプションを選択したかによって異なります。
- DebianのBourne Againシェルパッケージは、マニュアルの基本的な例に近いです。
% unsetenv PATH `コマンド -v bash` -c 'echo $PATH printenv パス' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. %
- Bourne AgainシェルのOpenBSDポート/パッケージは同じです。
$unsetenv PATH `コマンド -v bash` -c 'echo $PATH printenv パス' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. $
- Bourne AgainシェルのFreeBSDポート/パッケージでは多少破損しています。
% unsetenv PATH `コマンド -v bash` -c 'echo $PATH printenv パス' /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin %
2017年3月に、ソフトウェアの構築に使用されたコンパイラオプションを調整して調整しました。
printenv
どの行も印刷されないという事実は、このデフォルトのシェルPATH
変数が環境変数にエクスポートされないことを意味します。