Je suis sur CentOS 6.4. Par défaut, l'invite de l'utilisateur root a un #
symbole, c'est-à-dire qu'il ressemble à quelque chose [root@myserver ~]#
.
echo $PS1
imprime [\u@\h \W]\$
; mais si je le fais PS1="[\u@\h \W]\$"
(qui ne devrait pas changer quoi que ce soit, afaics), je finis avec une invite qui ressemble à ceci: [root@myserver ~]$
.
Pourquoi quand j'essaye de le régler moi-même (j'aimerais finalement le changer en quelque chose de plus utile), interprète-t-il $
littéralement? Presque toutes les pages que je peux trouver (par exemple, Comment: changer / configurer l'invite personnalisée bash (PS1) ) indiquent que cela \$
devrait entraîner un #
pour l'utilisateur root.
PS1=[\u@\h \W]\$
retourne-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Réponses:
Dans votre question, vous indiquez que vous ne citez pas du tout la ligne; c'est clairement faux, car alors l'espace séparerait l'affectation d'argument "PS1 = [\ u @ \ h" de la commande "\ W] \ $". Veuillez vous rendre compte que chaque personnage est important.
Quoi qu'il en soit, ce que vous faites probablement est d'utiliser des guillemets doubles (") plutôt que des guillemets simples ('). Ils se comportent très différemment en ce qui concerne le shell interprétant ce que vous avez tapé. Avec des guillemets doubles, il essaiera de faire des choses intelligentes avec les séquences de barre oblique inverse / certains caractères. Pour cette affectation, étant donné qu'il n'y a rien de spécial à propos de \ u, \ h et \ W, ils ne sont pas modifiés; les crochets peuvent avoir des significations spéciales à divers endroits, mais pas dans ce cas, ils sont donc également laissés en place, mais comme a
$
a une variété de significations, toutes spéciales, la\$
séquence est interprétée comme "ignorer la particularité du signe dollar, et la laisser là", et cette séquence est remplacée par un signe de dollar unique sans autre analyse. Le résultat de tout cela est attribué àPS1
, et puisqu'il y a un signe dollar littéral, et non la\$
séquence magique lorsque le shell construit l'invite réelle, vous obtenez simplement le signe dollar, et non le caractère dépendant de l'utilisateur effectif. L'analyse réelle est un peu plus compliquée, mais c'est l'essentiel pour cet exemple particulier.Ce que vous avez tapé:
PS1="[\u@\h \W]\$ "
Ce que le shell a attribué:
PS1 <- "[\u@\h \W]$ "
Ce que vous vouliez:
PS1 <- "[\u@\h \W]\$ "
Ce que vous devez taper:
PS1='[\u@\h \W]\$ '
Ce que vous devez faire ensuite: lisez quelque chose comme ce didacticiel pour en savoir plus sur les citations du shell.
la source
PS1="...\\\$"
de veiller à ce que la paire littérale\$
est stockée dansPS1
la coquille pour interpréter plus tard.Avez - vous changé à l'utilisateur root à l' aide
sudo su
,su
ou en vous connectant en tant que root? Utilisez cette optionid
pour vérifier qui est considéré par l'ordinateur comme étant connecté, car cela peut affecter le profil que vous modifiez.Découvrez les réponses à /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
la source