OS X(10.6.4)端末でbashシェルを調べると、たとえばと入力するecho $0と、シェルの前に次のようにダッシュが表示されます-bash。このダッシュはどういう意味ですか?
OS X(10.6.4)端末でbashシェルを調べると、たとえばと入力するecho $0と、シェルの前に次のようにダッシュが表示されます-bash。このダッシュはどういう意味ですか?
回答:
これはbash、ログインシェルとして呼び出されることを意味します。
man bash 言う:
ログインシェルは、引数ゼロの最初の文字がであるシェル
-、または--loginオプションで開始されたシェルです。bashが対話型ログインシェルとして、または
--loginオプション付きの非対話型シェルとして呼び出されると、/etc/profileファイルが存在する場合は、最初にファイルからコマンドを読み取って実行します。そのファイルを読んだ後、それは探し~/.bash_profile、~/.bash_login、および~/.profile、そのためには、および読み込み、存在し、読み取り可能である最初のものから実行するコマンドを。--noprofileこの動作は、シェルの起動時にこのオプションを使用して禁止できます。ログインシェルが終了すると、bashはファイルからコマンドを読み取り、実行します(
~/.bash_logout存在する場合)。
あなたは見つけることができますlogin -pf、あなたの中でps、デフォルトではログインシェルを起動し、出力、。
実行login -pfしてみてlogin -pfl、違いを確認してください。man login違いを説明します:
-lログインによって実行されるプログラムに、これがログインセッションではないことを通知します(慣例により、ログインセッションは、ハイフンがの最初の文字としてプログラムに通知されargv[0]ます。このオプションは、それを無効にします)。chdir(2)ユーザーのホームディレクトリにアクセスできなくなります。。デフォルトではハイフンが追加されます(これはログインセッションです)。
echo $0に入力echo $0するctrl + alt + f1と、結果は-bashです。しかしctrl + alt + t、によって呼び出されたtermianlに入力すると、結果はbash(先頭のダッシュなし)になります。理由を説明してもらえますか?
--login引数を指定してbashを起動すると、bashは変更されませんargv[0]が、ログインシェルとして機能します。
man引用への感謝