web-dev-qa-db-ja.com

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

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

IE:

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

どうしてこれなの?

10
Jack

従来、元の/ bin/sh Bourne Shellは、通常のプロンプトとして$を使用し、ルートユーザープロンプトに対して#を使用していました(cshは%を使用していました)。これにより、スーパーユーザーとして実行しているかどうかが非常に簡単にわかります。

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

より最近のシェル(ksh、bashなど)では、$#の区別を続けていますが、ユーザー名、ホスト名、ディレクトリなどのより複雑な値を設定できる場合はそれほど重要ではありません:-)

15
Stephen Harris

伝統。

POSIX標準によると (私の強調):

PS1

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

SuperUserフォーラムのほぼ同じ質問については this answer も参照してください。

9
Kusalananda