env -i bash を使用して Bash シェルを起動する場合、PATH 変数セットはどこにありますか?

env -i bash を使用して Bash シェルを起動する場合、PATH 変数セットはどこにありますか?

/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

printenvPATHに値がないことを確認してください。何かを見つけたら、おそらくあなたのものから来たのでしょう~/.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を入れることが誤って仕事をするのは簡単なので、一般的に悪い習慣と見なされると思います!

おすすめ記事