bashの前のダッシュ(-)


14

OS X(10.6.4)端末でbashシェルを調べると、たとえばと入力するecho $0と、シェルの前に次のようにダッシュが表示されます-bash。このダッシュはどういう意味ですか?

回答:


14

これは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)ユーザーのホームディレクトリにアクセスできなくなります。。デフォルトではハイフンが追加されます(これはログインセッションです)。


すばらしい答え、説明とman引用への感謝
marshall.ward

1
私はubuntuを使用していて、さまざまな動作が見られます。によって呼び出されたターミナルecho $0に入力echo $0するctrl + alt + f1と、結果は-bashです。しかしctrl + alt + t、によって呼び出されたtermianlに入力すると、結果はbash(先頭のダッシュなし)になります。理由を説明してもらえますか?
Frozen Flame

@ frozen-flame 1つはログインシェルで、もう1つはそうではありません。OS XターミナルとLinuxターミナルの動作は異なります。
ダニエルベック

@DanielBeckは、もう一方がログインシェルではないことの証明ではありません。--login引数を指定してbashを起動すると、bashは変更されませんargv[0]が、ログインシェルとして機能します。
Ruslan

@Ruslan確かに、理論的には、まだログインシェルである可能性があります。しかし、そうではありません。(少なくともそうだったとしても、私は非常に驚きます。)
Daniel Beck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.