web-dev-qa-db-ja.com

bashプロンプト(PS1)を手動で設定すると、ルートに#ではなく$が表示されるのはなぜですか?

私はCentOS6.4を使用しています。デフォルトでは、rootユーザーのプロンプトには#記号があります。つまり、[root@myserver ~]# のようになります。

echo $PS1[\u@\h \W]\$を出力します。しかし、PS1="[\u@\h \W]\$"(何も変更しないはずです、afaics)を実行すると、次のようなプロンプトが表示されます:[root@myserver ~]$

自分で設定しようとすると(最終的にはもっと便利なものに変更したいのですが)、$を文字通りに解釈するのはなぜですか?私が見つけることができるほぼすべてのページ(例: 方法:bashカスタムプロンプト(PS1)を変更/設定する )は、\$がルートの#になるはずだと言っていますユーザー。

11
stripybadger

あなたの質問では、あなたはあなたがその行をまったく引用していないことを暗示しています。スペースが引数の割り当て「PS1 = [\ u @\h」をコマンド「\ W]\$」から分離するため、これは明らかに間違っています。すべてのキャラクターが重要であることを認識してください。

とにかく、おそらくあなたがしているのは、一重引用符( ')ではなく二重引用符( ")を使用することです。入力した内容を解釈するシェルに関しては、動作が大きく異なります。二重引用符を使用すると、次のように巧妙な処理を実行しようとします。バックスラッシュ/一部の文字のシーケンス。この割り当てでは、\ u、\ h、および\ Wについて特別なことは何もないため、そのままにしておきます。角かっこはさまざまな場所で特別な意味を持つことができますが、この場合はそうではありません。したがって、それらもそのまま残されます。ただし、$にはさまざまな意味があり、それらはすべて特別であるため、\$シーケンスは「ドル記号の特殊性を無視し、そのままにしておく」と解釈されます。これ以上解析されない単一のドル記号に置き換えられます。そのすべての結果はPS1に割り当てられ、シェルが実際のプロンプトを作成するときの魔法の\$シーケンスではなく、文字通りのドル記号があるため、ドルを取得するだけです。有効なユーザーに依存するcではなく署名haracter。実際の解析はもう少し複雑ですが、それがこの特定の例の要点です。

入力した内容:PS1="[\u@\h \W]\$ "
シェルが割り当てたもの:PS1 <- "[\u@\h \W]$ "
必要なもの:PS1 <- "[\u@\h \W]\$ "
入力する内容:PS1='[\u@\h \W]\$ '

次にすべきこと:シェルの引用について詳しくは、 このチュートリアル のようなものを読んでください。

14
Gabe

Sudo susuを使用するか、rootとしてログインして、rootユーザーに切り替えましたか? idを使用して、実際に編集しているプロファイルに影響を与える可能性があるため、コンピューターがログインしていると見なすユーザーを確認します。

https://askubuntu.com/questions/305052/changing-behavior-of-bash-Prompt-when-functioning-as-root への回答を確認してください

0
dunxd