Estoy en CentOS 6.4. Por defecto, la solicitud del usuario raíz tiene un #
símbolo, es decir, se parece a algo así [root@myserver ~]#
.
echo $PS1
imprime [\u@\h \W]\$
; pero si lo hago PS1="[\u@\h \W]\$"
(que no debería cambiar nada, afaics), termino con un mensaje que es similar al siguiente: [root@myserver ~]$
.
¿Por qué cuando trato de configurarlo yo mismo (en última instancia, me gustaría cambiarlo por algo más útil), ¿lo interpreta $
literalmente? Casi todas las páginas que puedo encontrar (por ejemplo, Cómo: Cambiar / Configurar bash custom prompt (PS1) ) dice que \$
debería dar como resultado un #
para el usuario root.
PS1=[\u@\h \W]\$
vuelve-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Respuestas:
En su pregunta, implica que no está citando la línea; eso es claramente incorrecto, porque entonces el espacio separaría la asignación de argumento "PS1 = [\ u @ \ h" del comando "\ W] \ $". Tenga en cuenta que cada personaje es importante.
De todos modos, lo que probablemente esté haciendo es usar comillas dobles (") en lugar de simples ('). Se comportan de manera muy diferente cuando se trata de que el intérprete de comandos interprete lo que escribió. Con comillas dobles, intentará hacer cosas inteligentes con las secuencias de barra invertida / algún carácter. Para esta tarea, dado que no hay nada especial sobre \ u, \ h y \ W, no se tocan; los corchetes pueden tener significados especiales en varios lugares, pero no en este caso, así que también se dejan en su lugar; pero dado que
$
tiene una variedad de significados, todos ellos especiales, la\$
secuencia se interpreta como "ignorar la especialidad del signo de dólar, y simplemente dejarla allí", y esa secuencia se reemplaza por un signo de dólar único sin analizar más. El resultado de todo eso se asigna aPS1
, y dado que hay un signo de dólar literal, y no la\$
secuencia mágica cuando el shell construye la solicitud real, solo obtienes el signo de dólar, y no el carácter efectivo dependiente del usuario. El análisis real es un poco más complicado, pero esa es la esencia de este ejemplo en particular.Lo que escribió:
PS1="[\u@\h \W]\$ "
Lo que asignó el shell:
PS1 <- "[\u@\h \W]$ "
Lo que quería:
PS1 <- "[\u@\h \W]\$ "
Lo que debe escribir:
PS1='[\u@\h \W]\$ '
Lo que debe hacer a continuación: lea algo como este tutorial para obtener más información sobre las citas de shell.
fuente
PS1="...\\\$"
para asegurarse de que el par literal\$
se almacena enPS1
la cáscara para interpretar más tarde.¿Ha cambiado al usuario root utilizando
sudo su
,su
o entrando como root? Utilíceloid
para verificar quién considera que la computadora ha iniciado sesión, ya que puede afectar el perfil que está editando realmente.Vea las respuestas a /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
fuente