ti-enxame.com

Quais são alguns prompts de concha informativos e úteis? (Bash, csh, ksh, etc.)

Um dos meus favoritos Mac OS X terminal Dicas envolve a adição do último processo de execução no título do terminal usando o seguinte código no seu . Bashrc .

trap 'printf "\033]0;  `history 1 | cut -b8-`  \007"' DEBUG

Agora estou procurando personalizar meu prompt Bash do padrão em algo mais funcional. Quais são alguns exemplos de prompt de shell úteis?

8
Dave K

Eu uso um simples liner:

[\w]\n\[email protected]\h>

ou

[\w]\n\[email protected]\h#

se root. As pessoas olham para mim como se eu seja louca por usar um prompt de duas linhas, mas eu Ódio apenas vendo a última parte do caminho atual, e eu trabalho com caminhos que são muito longos para colocar o todo coisa na mesma linha que a área de entrada.

6
chaos

Eu tenho um script ~/bin/setprompt que é executado pelo meu .bashrc, que contém:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

Este script define o prompt para o nome do host seguido por :) Se o último comando foi bem sucedido e :( Se o último comando falhou.

7
Eddie

Isso, no entanto, é o mais awesomest que eu já vi:

PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Managing \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]jobs.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]CPU Load: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Uptime: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}d; fi ; echo -n ${hours}h${mins}m)\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]$(ls -l | grep "^-" | wc -l | tr -d " ") \[\033[0m\]\[\033[0;28m\]files using \[\033[0m\]\[\033[1;31m\]$(ls --si -s | head -1 | awk '\''{print $2}'\'')\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[1;31m\]\u\[\033[0m\]\[\033[0;31m\]@\[\033[0m\]\[\033[1;31m\]\h \[\033[0m\]\[\033[1;34m\]\w\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:. \[\033[0m\]\[\033[1;37m\]$ \[\033[0m\]'

Dê um tiro. Dá boas informações, mas realmente fará com que a carga em suas caixas aumentasse apenas pressionando a entrada em um prompt!

4
Glen Solsberry

Eu sou um fã do prompt de Bash de Cygwin padrão:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\[email protected]\h \[\e[33m\]\w\[\e[0m\]\n\$ '

ou sem cores:

PS1='\n\[email protected]\h \n\$ '

parece:

[email protected]
$ ls -l
3
spoulson

Aqui está o meu (role para a direita para ver um pouco mais interessante):

'-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\[email protected]\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$ 

Aqui está o resultado:

-------------------------------------------------------------------------------
[~]
[email protected]()$ 

Quando estou dentro de um gitrepositório :

-------------------------------------------------------------------------------
[~/path_to_repo]
[email protected](master)$ 

Eu escolho usar várias pausas de linha e a "régua horizontal" para facilitar a varredura de buffers, e os nomes de caminho tão longos não empurram o cursor para a direita.

2
Ivan

Eu gosto de incluir o tempo no meu. Me dá uma espécie de um construído em time em torno de meus comandos:

PS1="[\t \[email protected]\h:\w]$ "

Embora depois de ver alguns deles, isso me faz querer fazer o meu um pouco mais inteligente!

2
Glen Solsberry

Não é um prompt de shell, mas é uma personalização que pode se encaixar no espírito do que você está perguntando.

Eu defini a seguinte variável de ambiente:

if [ -z "$Prompt_COMMAND" ]; then
    export Prompt_COMMAND='history -a'
else
    export Prompt_COMMAND="history -a;$Prompt_COMMAND"
fi

Dessa forma, se eu tiver vários terminais abertos via tela ou qualquer outra coisa, não vou perder a história quando eles se mudarem os outros.

1
deinspanjer

Semelhante a resposta do caos , eu meio que gosto

\[email protected]\h:\w\n\[email protected]\h:\$

o que me dá

[email protected]:/var/www/site.org
[email protected]:$

Ao incluir o usuário/host na primeira linha, posso facilmente copiar toda a linha de caminho quando estou usando [~ #] SCP [~ # ~] , ou rsync = para enviar alguns arquivos para esse diretório.

1
Zoredache

Em Ksh:

No meu .profile, eu defini o seguinte var (então este var só é definido uma vez por sessão de todos os tempos, não importa quantos 'SU's eu faço:

PCH=\>

No meu .kshrc eu tenho:

if let "${SPID:-0} != $$"; then
    PCHS="$PCHS$PCH"
fi

Eu me torno raiz com os seguintes alias, em vez de "su" (Kroot é um usuário raiz com um shell KSH em vez de SH (Solaris) ou Bash (Linux):

alias root='PCH=\# su -m kroot'
alias me="PCH=\> su -m $USER"

Eu também defini essas duas funções:

function lprompt {
  PS1=$Host' $? $PWD '"$PCHS "
}
function sprompt {
  PS1='$?":"${PWD##*/}'"$PCHS "
}

e finalmente no final de .kshrc eu tenho:

lprompt

Tudo isso dá-me por definição automática padrão do final do meu prompt para indicar se sou ou não raiz (e, por sua vez, se eu tiver um pai que era root), diretório de trabalho atual, nome do host e status de saída do último processo. Spropt deixa cair o nome do host, encolhe o caminho até apenas o nome de basen, e remove espaços:

g3 0 /home/jj33 > expr 1 / 0
expr: division by zero
g3 2 /home/jj33 > expr 1 / 1
1
g3 0 /home/jj33 > root
Password: 
g3 0 /home/jj33 ># me
g3 0 /home/jj33 >#> ^D
g3 0 /home/jj33 ># sprompt
0:jj33># me
g3 0 /home/jj33 >#> sprompt
0:jj33>#>expr 1 / 0
expr: division by zero
2:jj33>#>

Os aliases raiz/me são Bourne da administração pré-sudo em solaris e velhos hábitos morreram duro. Eu duvido que alguém implementei a mesma coisa nos dias de hoje. As funções de mudança de prompt e o status existente continuam sendo muito valiosos para mim.

1
jj33
  export PS1="\[`if [[ $? = 0 ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi`:\w\n$ "

Isso é exibido:

hostname:~
$ 

Com 'hostname' em verde se o último código de retorno de comando executado foi '0' e vermelho se fosse> '0'.

1
jtimberman

Eu tenho um prompt que é simples, mas usa cores para dar algumas informações extras:

drewble:~$ 

A cor do nome do host (drowble, neste caso) é diferente em cada máquina - quando recebo uma nova máquina que trabalho, escolho uma cor arbitrária para essa máquina. Dessa forma, quando tenho muitos terminais abertos, é fácil dizer qual máquina eles são sshed e reduz erros que faço sendo na máquina errada. Além disso, quando eu faço Sudo -s, Coloquei o nome do host em todas as caps e cor o Colon Red, novamente, isso reduz erros, deixando claro que está agindo como root. O caminho (meu diretório inicial, ~ Neste caso) está em verde brilhante, o que ajuda a separar linhas de saída; Se algo cria muita saída, é fácil rolar e ver onde a saída começou.

# Color the hostname
HOSTNAME=`hostname|sed -e 's/\..*$//'`
if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
    export Host_COLOR="\[\033[1;35m\]"
fi
if [ $HOSTNAME = 'drewble' ]; then
    export Host_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
    export Host_COLOR="\[\033[1;31m\]"
fi

# Color the colon red & capitalize hostname if root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
    COLON_COLOR='1;31m'
fi
if [ ${UID} -eq 0 ]; then
    HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
fi

# Set the actual Prompt
PS1=`echo -ne "$Host_COLOR$HOSTNAME\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`
1
Drew Stephens

Para bash eu gosto

Ps1 = "\ h\d\w\n\u>"

o que resulta em:

myserver mon set 07 07:43:11/U08
[.____] raiz>

Então você obtém nome de host, data e hora, caminho completo e nome de usuário em uma nova linha, com o prompt. Isso é para minimizar o envoltório de linha em diretórios. Eu estou dentro e fora das caixas o dia todo, então tudo que posso fazer para mantê-lo reto é bom. Eu também tenho putty definir para registrar tudo. Eu posso voltar e olhar para logs e ver exatamente o que eu estava fazendo quando. Também útil para descobrir seqüências de eventos em várias janelas terminais de uma só vez.

0
Ronald Pottol

Meu prompt normal é

\[email protected]\h $PWD $WINDOW [$?] \$

Isso me dá o usuário atual, o diretório atual atual do host (sem substituindo $ casa por ~), atual screen janela e último retorno de erro. Como normalmente tenho 16 ou mais janelas de tela abertas, sabendo que o atual é útil.

0
staticsan