prompt bash: mostra o diretório atual no final da linha

prompt bash: mostra o diretório atual no final da linha

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:

  1. O caminho desaparece quando você pressionaBackspace
  2. 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=pwdpara 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;...\adefine o título da janela. Na tela, é "\033k\033\0134\033kTITLE\033\0134".

informação relacionada