quebra de linha quebrada quando PS1 contém uma nova linha

0

Recentemente, comecei a usar o linux e achei que seria útil poder ver o diretório de trabalho (não apenas o nome da base), então mudei o arquivo ~/.bashrc para este:

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
LGREEN="\[$(tput setaf 10)\]"
DGREEN="\[$(tput setaf 28)\]"
GREEN="\[$(tput setaf 2)\]"
RESET="\[$(tput setaf 255)\]"
TEAL="\[$(tput setaf 123)\]"
PS1="${RESET}/${LGREEN}\u@${GREEN}\t${DGREEN} \w ${RESET}\n\ \[\[3[5m\]${TEAL}>>\[3[0m\]\]" 

Eu tentei tudo o que eu consegui pensar: agrupar os caracteres de escape em \[\] , agrupar as variáveis de cor novamente em \[\] , mas nada funcionaria, acontece a mesma coisa: se o comando que estou digitando é muito longo para caber em uma única linha, em vez de ser enrolado corretamente e ir na próxima linha, ele se sobrepõe a si mesmo e parece quebrado.

    
por WebDesignbyTM 08.10.2018 / 07:23

1 resposta

0

Acho que a nova linha deve funcionar lá, pois o escape \n está listado explicitamente como um dos escores de prompt. Deve ser fácil para o shell interpretar, também, ele só precisa redefinir o tamanho do prompt para zero ao saltar para a próxima linha.

Até onde eu testei, parecia que o \[\[ e \]\] duplicados no final causavam problemas.

Aqui, você tem um conjunto de \[ \] em torno de toda a parte final e, em seguida, dois conjuntos iguais dentro dessa parte.

\[\[3[5m\]${TEAL}>>\[3[0m\]\]
  ^^^^^^^^^^^         ^^^^^^^^^^^

Você provavelmente deve remover os externos:

\[3[5m\]${TEAL}>>\[3[0m\]

Os códigos de cores são bons, pois você está usando aspas duplas ao definir PS1 , para que as variáveis de cor sejam expandidas na atribuição e o \[ \] escapa dentro delas.

Se o prompt de duas linhas realmente não funcionar, você poderá sempre imprimir a primeira linha em PROMPT_COMMAND .

Algo como PROMPT_COMMAND='printf "${RESET}/${LGREEN}$USER@${GREEN}$(date +%T)${DGREEN} $PWD ${RESET}\n"' deve funcionar, mas, nesse caso, você precisa ter as variáveis de cor sem o \[ \] .

    
por 08.10.2018 / 08:38