/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を入れることが誤って仕事をするのは簡単なので、一般的に悪い習慣と見なされると思います!