Como fazer meu prompt do bash exibir algo nofimda linha (com o cursor posicionado normalmente no início da mesma linha)? Especificamente, desejo exibir um prompt abreviado de um único caractere, como $
ou >
após o qual posso digitar meu comando. Mas quero poder ver o diretório de trabalho atual no final da linha, onde não está "na minha cara".
Não me importo com o que acontece quando digito um comando muito longo. Ele pode substituir o diretório de trabalho atual ou qualquer outra coisa que meu prompt exiba lá.
Como alternativa, não me importo se o prompt fizer com que o diretório de trabalho atual seja exibido no canto superior direito ou no canto superior esquerdo ou no canto inferior direito/esquerdo da tela. Só não quero isso na minha cara o tempo todo, mas quero que fique visível.
Responder1
Consegui configurar o PS1 para algo que imprime o caminho atual no final da linha do prompt:
PS1='\[$(for ((i=1; i < COLUMNS - ${#PWD} - 3; ++i)) ; do printf " " ; done ; printf "$PWD")\]'
Mas tem vários problemas que não consegui resolver:
- O caminho desaparece quando você pressionaBackspace
- Apesar de toda a expressão estar entre um marcador de largura zero
\[...\]
, depois de imprimir também o$
ou>
, o cursor se move para a extrema direita.
Já vi pessoas usando PROMPT_COMMAND=pwd
para mostrar o caminho, mas isso reduz o número de linhas contendo seus comandos no terminal.
Outra opção é configurar seu terminal ou screen/tmux para exibir o caminho em algum lugar. Por exemplo, o seguinte funciona no xterm:
PS1='\[\e[m\e]0;\W\a\]$ '
A sequência \e[m\e]0;...\a
define o título da janela. Na tela, é "\033k\033\0134\033kTITLE\033\0134"
.