私はそれを男バッシュで見つけました:
bashが対話型ログインシェルとして、または--loginオプション付きの非対話型シェルとして呼び出されると、ファイル/ etc / profileが存在する場合、そのファイルからコマンドを最初に読み取り、実行します。
これは、対話型ログインシェルが/etc/profile
(--noprofileなしで)読み取ることを示しています
また、オプションreadを持つ非インタラクティブシェル--login
/etc/profile
これは、非インタラクティブ(スクリプトを実行する、おそらくのように単純な)で(ソース)を読み取れない可能性がある一部のログインシェル(で$0
始まる-
)を残すようです。date
/etc/profile
このアイデアを確認または拒否するには:
最初に、最初の文字としてsu -l -
a を使用してログインシェルを開始するを使用しようとしましたが、-
非対話型にすることができません(それをテストするためのテストを提示できます)。
のようなものを呼び出す
$ bash -c 'date' -bash
ログインシェルであることを報告しません(最初の文字がであっても-
)。
これを試して詳細を明らかにしてください:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
の最初の文字
$0
はa-
でありi
、の値には(インタラクティブ)$-
はありませんが、login_shell
(-u)としては報告されません。この場合、/ etc / profileは読み取られませんでしたが、これが正しいテストであるかどうかはわかりません。
この質問には十分具体的ではありませんが、この回答には「まれな非対話型ログインシェル」についての言及もあります。
この男の結論は、/etc/profile
常に読まれているということです。
概要表を読んでください:対話型と非対話型の両方のログインシェルを読み取ります /etc/profile
そして、このページの例が正しい場合:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
読み込まれたexec su - bob -c 'env'
レポートのテスト/etc/profile
。
要するに:
それが持っていることが可能である非対話型ログイン(または-l --loginで呼び出されていない)シェルを?
そして本当なら、それは/etc/profile
ファイルを読んでいますか?
上記が当てはまる場合、すべてのログインシェルが[対話型(または非対話型)]で/ etc / profile(--noprofile
オプションなし)を読み取ると結論付ける必要があります。
注:/ etc / profileが読み取られていることを検出するには、ファイルの先頭に次のコマンドを追加します。
echo "'/etc/profile' is being read"
--login
オプションはオプションを使用しています。2番目の場合、exec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
取得すると(C qoutesにエンコードされて)取得され$'/etc/profile read\nshopt -s login_shell\nbash himBH'
ます。これはログインですが、インタラクティブです。ログインと非対話型が必要です。何が欠けているのですか?