$がユーザーシェルのデフォルトシンボルであり、#がルートシェルのデフォルトシンボルであるのはなぜですか?


10

サーバーで標準のbashシェルを操作する場合、PS1プロンプトはデフォルトで非ルートユーザーの場合は$で終わり、ルートの場合は#で終わります。

IE:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

どうしてこれなの?


歴史的またはもっと直接的に?
ジェフシャラー

回答:


16

従来、元の/ bin / sh Bourneシェルは$、通常のプロンプトおよび#rootユーザープロンプトとして使用されていました(cshはを使用していました%)。これにより、スーパーユーザーとして実行しているかどうかを簡単に判別できました。

# コメント文字でもあるので、盲目的にデータを再入力しても、実際のコマンドは実行されません。

より近代的なシェル(例えばkshのは、bash)は、この区別を継続$して#使用すると、ユーザー名、ホスト名、ディレクトリなどのより複雑な値を設定することができるとき、それはあまり重要ですが:-)


#コメント文字であることによって、誰かが盲目的にデータを再入力している場合に、実際のコマンドを実行できないようにする例を挙げられますか?
John Gowers

6
完全な行をカットアンドペーストするとどうなりますか?# reboot答え...何もありません、 'cos #はコメントです。
スティーブンハリス

9

伝統。

POSIX標準は次のように述べています(私の強調):

PS1

この変数は、対話型プロンプトに使用されます。歴史的に、「スーパーユーザー」には「#」のプロンプトがありました。特権はモノリシックである必要はないので、どのプロンプトが代替プロンプトを引き起こすかを定義することは困難です。ただし、十分にパワフルなユーザーは、別のプロンプトを表示することでその能力を思い出す必要があります。

SuperUserフォーラムでほぼ同じ質問に対するこの回答も参照してください。


追加するには、これはRationale> C. Shell&UtilitiesのRationale> 2.シェルコマンド言語にあります。私は何か他のもののためにそれへの参照を見つけなければなりません
でした

1
@forquareありがとう。適切なリンクを追加しました。
Kusalananda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.