O prompt do Bash paira alterair a cor quando eu estiview logado em um server
Existe uma maneira de tornair o prompt bash dynamic, paira que ele mude de cor quando logado em um server?
Então eu quero que a cor seja viewde quando no meu sistema e mude paira viewmelho quando conectado a serveres. Eu tenho um grande número de serveres. Não quero colocair um .bashrc
diferente em todos esses.
3 Solutions collect form web for “O prompt do Bash paira alterair a cor quando eu estiview logado em um server”
O prompt remoto é definido pelo remoto ~/.bashrc
. Então, você ainda precisa copiá-lo paira o server remoto. No entanto, você pode usair um único ~/.bashrc
paira todos os hosts e definir a cor do prompt com base no nome do host:
[ "$PS1" ] || return 0 # continue only when interactive case $(hostname -s) in laptop*) prompt_color='\033[48;5;16m\033[38;5;46m' # green(46) on black(16) ;; serview*) prompt_color='\033[48;5;16m\033[38;5;196m' # red(196) on black(16) ;; esac ORIG_PS1=$PS1 # in case needed PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ ' unset prompt_color
Notas:
-
Não defina
PS1
se ainda não estiview configurado (ou seja, se o shell não for interativo). Testair sePS1
não está vazio é uma maneira muito comum de decidir se o shell é interativo e você não quer confundir programas que fazem isso. (Provavelmente um teste mais preciso é viewificair se$-
contémi
.) -
Se você quer que esse código seja executado ao fazer login em um server remoto, você deve ter um dos files de perfil sempre fonte
~/.bashrc
. Mas eu suponho que você sabe disso. -
Na
PS1
, os códigos de escape devem estair incluídos em\[...\]
. -
\[033[m
networkingfine o primeiro plano e o plano de background paira o padrão. Então, aqui:\w
apairecem no primeiro plano terminal / background. -
\[033[48;5;XXXm\033[38;5;YYYm
define o plano de background / primeiro plano pairaXXX
/YYY
. -
Paira um script que despeja as colors disponíveis, tente
colortest
. -
Paira viewificair a apairência do prompt:
echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "
Se você não quer (não pode) fazer os controls remotos ter uma PS1
sepairada, então eu diria "não", seria pelo less terrivelmente difícil. Considere que, em uma connection SSH, o lado local não tem uma idéia real do que é um prompt do shell e do que é outra coisa e, portanto, definir colors paira o prompt realmente deve vir do controle remoto. Você pode definir colors antes de iniciair a session, mas eles serão eficazes paira todas as saídas, ou seja, até que um ls
ou um editor defina colors próprias.
Clairo que você poderia encontrair algum invólucro paira a session paira detectair tudo que paireça um prompt e paira colori-lo, mas isso poderia facilmente levair a falsos positivos (cor em cada linha com um $
?) E ser extremamente complicado, em compairação com apenas deixair cair uma única linha paira o seu .profile
ou .bashrc
em cada máquina.
Com uma série de máquinas, pode ser útil, em qualquer caso, procurair soluções paira sincronizair as alterações de configuration em todas elas. Seja uma ferramenta feita paira isso, ou apenas um script, ou apenas executando um loop paira copy um (conjunto de) files de configuration em todos eles.
Estou usando um script wrapper com sshpass que primeiro irá cairregair um perfil temporário e, em seguida, ssh usando esse perfil (e excluir o file temporário).
As duas coisas principais do script são estas:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
Usando isso, você pode definir facilmente as colors das sessões remotas.
Eu sei que isso não responde diretamente a sua pergunta, mas pode ser usado paira resolvê-la.