インタラクティブ、非インタラクティブ、ログイン、および非ログインシェルについて読み続けています。
(これは、どの.bash *ファイルが読み取られるかというコンテキストにあります)。
それぞれのシェルの種類がわからないので、基本から始めましょう。
MacからubuntuマシンにSSHで接続すると、どのタイプのシェルが起動しますか?
UbuntuボックスにSSHで接続すると、インタラクティブなログインシェルが得られます。違いは次のとおりです。
インタラクティブvs.非インタラクティブ:プロンプトで入力できるシェルはすべてインタラクティブです。実際、多くのスクリプトは、プロンプト文字列を保持する変数$PS1
をテストして、それらが対話型であるかどうかを確認します。シェルがシェルスクリプトを実行している場合、それは非対話型です。
したがって、ssh yourbox.example.com
を実行すると、デフォルト設定を想定して対話型シェルが取得されますが、ssh yourbox.example.com mighty_shellscript.sh
を実行すると、非対話型シェルになり、SSHセッションが終了します。スクリプトが終了したとき。
ログインと非ログイン:コンソールまたはリモート(SSHなど)からログインする場合、または-l
オプションをbash
に渡すと、次のようになります。ログインシェル。それ以外の場合(ターミナルウィンドウを開いたときなど)、ログインしていないシェルが表示されます。
シェルがログインシェルであるかどうかをテストするには、そのコマンド名がbash
ではなく-bash
であるかどうかを確認します。
ps -ef | grep [b]ash
インタラクティブなログインシェルを取得します。しかし、それを当然のことと思ってはいけません。自分でチェックしてください。
これは、ログインシェル(man bash
から)があることを示しています。
# shopt | grep login
login_Shell on
これは、インタラクティブなシェルがあることを示しています。i
(man bash
から)を探してください。
# echo $-
himBH
取得したインタラクティブログインシェルは、/etc/profile
で説明されているように、~/.bash_profile
を読み取り、~/.bash_login
、~/.profile
、およびman bash
のいずれかよりも読み取ります。
Bashがインタラクティブログインシェルとして、または--loginオプションを指定した非インタラクティブシェルとして呼び出されると、最初にファイル/ etc/profileからコマンドを読み取り、実行します。そのファイルが存在します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、〜/ .profileの順に検索し、最初に存在して読み取り可能なコマンドからコマンドを読み取って実行します。シェルの起動時に--noprofileオプションを使用して、この動作を禁止できます。
このコマンドを試してください。
[max @ localhost〜] $ echo $ Shell /bin/bash
シェルタイプがこの変数Shell
に格納されているため、この出力が得られます。
環境変数を知るには、このコマンドを入力します
[max @ localhost〜] $ env 。 。 。 HOSTNAME = localhost.localdomain Shell =/bin /bash HISTSIZE=1000 USER=max . . .
echo $Shell
と入力すると、ここに保存されている値が出力されます。
この値は、起動するたびに更新されます
ssh(1) のマニュアルページには、
commandが指定されている場合、ログインシェルではなくリモートホストで実行されます。
そして
ユーザーのIDがサーバーによって受け入れられると、サーバーは指定されたコマンドを実行するか、マシンにログインして、リモートマシン上の通常のシェルをユーザーに提供します。
それらはあなたが得ているシェルがログインシェルであることを私に示唆します。