Por que configurar o prompt do bash (PS1) manualmente faz com que o root tenha um $ em vez de um #?

11

Estou no CentOS 6.4. Por padrão, o prompt do usuário raiz tem o símbolo # , ou seja, ele é parecido com [root@myserver ~]#  .

echo $PS1 imprime [\u@\h \W]\$ ; mas se eu faço PS1="[\u@\h \W]\$" (o que não deve mudar nada, afaics), acabo com um prompt parecido com isto: [root@myserver ~]$ .

Por que quando eu tento configurá-lo sozinho (eu gostaria de alterá-lo para algo mais útil), ele interpreta o $ literalmente? Apenas sobre cada página que eu posso encontrar (por exemplo, How to: Alterar / Setup O prompt personalizado do bash (PS1) diz que \$ deve resultar em # para o usuário root.

    
por stripybadger 09.12.2013 / 14:03

2 respostas

14

Em sua pergunta, você insinua que não está citando a linha; isso está claramente errado, porque então o espaço separaria a atribuição de argumento "PS1 = [\ u @ \ h" do comando "\ W] \ $". Por favor, perceba que todo personagem é importante.

De qualquer forma, o que você provavelmente está fazendo é usar aspas duplas (") ao invés de simples ('). Elas se comportam de maneira muito diferente quando se trata de interpretar o que você digitou. Com aspas duplas, ele tentará fazer coisas inteligentes com as seqüências de barra invertida / alguns caracteres.Nesta atribuição, uma vez que não há nada de especial sobre \ u, \ h e \ W, eles são deixados intactos, colchetes podem ter significados especiais em vários lugares, mas não em Nesse caso, eles também são deixados no lugar, mas como um $ tem vários significados, todos eles especiais, a sequência \$ é interpretada como "ignorar o caráter especial do cifrão e simplesmente deixá-lo lá ", e essa seqüência é substituída por um sinal de dólar único não mais analisado. O resultado de tudo isso é atribuído a PS1 , e já que há um sinal de dólar literal, e não a seqüência mágica \$ quando shell constrói o prompt real, você acabou de obter o sinal de dólar, e não o caractere efetivo dependente do usuário. a análise é um pouco mais complicada, mas essa é a essência dela para esse 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ê deve digitar: PS1='[\u@\h \W]\$ '

O que você deve fazer em seguida: leia algo como este tutorial para saber mais sobre o shell que cita.

    
por 09.12.2013 / 14:44
0

Você mudou para o usuário root usando sudo su , su ou efetuando login como root? Use id para verificar em quem o computador considera que você está logado, pois isso pode afetar o perfil que você está realmente editando.

Confira as respostas para link

    
por 09.12.2013 / 14:19

Tags