Estou no CentOS 6.4. Por padrão, o prompt do usuário root possui um #
símbolo, ou seja, se parece com isso [root@myserver ~]#
.
echo $PS1
imprime [\u@\h \W]\$
; mas se eu fizer PS1="[\u@\h \W]\$"
(que não deve mudar nada, AFAICS), eu acabar com um prompt que se parece com isso: [root@myserver ~]$
.
Por que quando eu tento defini-lo eu mesmo (eu gostaria de mudar para algo mais útil), ele interpreta o $
literal? Quase todas as páginas que encontro (por exemplo, Como: alterar / configurar o prompt personalizado do bash (PS1) ) afirma que isso \$
deve resultar em um #
para o usuário root.
PS1=[\u@\h \W]\$
retorna-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Respostas:
Na sua pergunta, você implica que não está citando a linha; isso está claramente errado, porque o espaço separaria a atribuição de argumento "PS1 = [\ u @ \ h" do comando "\ W] \ $". Por favor, entenda que todo personagem é importante.
Enfim, o que você provavelmente está fazendo é usar aspas duplas (") em vez de aspas simples ('). Elas se comportam de maneira muito diferente quando se trata do shell interpretar o que você digitou. Com aspas duplas, ele tentará fazer coisas inteligentes com as seqüências de barra invertida / algum caractere. Para esta tarefa, como não há nada de especial em \ u, \ he \ W, eles são deixados intocados; colchetes podem ter significados especiais em vários lugares, mas não neste caso, para que eles também sejam deixados no lugar; mas como a
$
possui vários significados, todos eles especiais, a\$
sequência é interpretada como "ignore a especialidade do cifrão e deixe-o lá", e essa sequência é substituída por um cifrão único não mais analisado.O resultado de tudo isso é atribuído aPS1
, e como há um cifrão literal, e não a\$
sequência mágica quando o shell cria o prompt real, você apenas obtém o cifrão, e não o caractere dependente do usuário efetivo. A análise real é um pouco mais complicada, mas essa é a essência desse exemplo em particular.O que você digitou:
PS1="[\u@\h \W]\$ "
O que o shell atribuiu:
PS1 <- "[\u@\h \W]$ "
O que você queria:
PS1 <- "[\u@\h \W]\$ "
O que você deveria digitar:
PS1='[\u@\h \W]\$ '
O que você deve fazer em seguida: Leia algo como este tutorial para saber mais sobre a citação de shell.
fonte
PS1="...\\\$"
para assegurar que o par literal\$
é armazenado emPS1
para o shell para interpretar mais tarde.Que tenha mudado para o usuário root usando
sudo su
,su
ou fazendo o login como root? Useid
para verificar em quem o computador considera que você está conectado, pois isso pode afetar o perfil que você está realmente editando.Confira as respostas para /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
fonte