Non è necessario colorare il prompt di PS1


11

Di recente ho deciso di cambiare la mia variabile PS1 per adattarmi ad alcuni bei colori solarizzati per il mio piacere di visualizzazione terminale. Quando non sei in una sessione tmux, tutto è fantastico! Arcobaleni, pony, unicorni e un prompt distintivo! Freddo!

Tuttavia, il problema è all'interno di tmux. Ho verificato che il valore di PS1 è quello che mi aspetto che sia e lo stesso di quando tmux non è in esecuzione, vale a dire \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

Tutti i miei alias, ecc. Nel mio .bash_profile funzionano anche come previsto. tmux mostra anche i colori senza incidenti, come echo -ne "\033[1;33m hi"si comporta come previsto gls --color.

L'attuale riga pertinente nel mio .bash_profile è export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]", sebbene in origine stavo provando uno script situato in un file .bash_prompt per gestire alcuni condizionali, ecc. Ho provato a tornare alla versione più semplice.

L'esecuzione bashprovoca la colorazione del prompt, ma deve essere eseguita in ciascun riquadro. export PS1=[that long string I've already posted]no.

Il mio .tmux.conf è il seguente:

set-option -g default-command "reattach-to-user-namespace -l /usr/local/bin/bash"
set -g default-terminal "xterm-256color"
set-window-option -g automatic-rename on
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

Parti rilevanti di .bash_profile:

export TERM="xterm-256color"
if which tmux >/dev/null 2>&1; then
    test -z "$TMUX" && (tmux attach || tmux new-session)
fi

Sto usando macOS Sierra, iTerm 2, ho provato sia l'attuale versione homebrew di bash che il sistema bash (attualmente utilizza l'homebrew), tmux 2.4.

Ho anche inserito il touch testing_touch_from_bash_profilemio .bash_profile durante una sessione tmux con due riquadri, ucciso un riquadro, aperto un riquadro e verificato che il file fosse effettivamente creato.

echo $TERMritorna xterm-256color.

Mi sono assicurato che quando sono uscito da tmux per testare le modifiche alle modifiche, sono uscito da tmux e che nessun processo di tmux è attualmente in esecuzione sul sistema tramite ps -ax | grep tmux.

Stranamente, l'approvvigionamento dello script .bash_prompt cambia anche il colore fintanto che lo faccio all'interno di ciascun riquadro di tmux.

Ho guardato /programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w e ho provato ad aggiungere il flag --login dopo la chiamata bash nella prima riga del mio .tmux.conf. L'avvio di tmux con tmux new bashcauserà la colorazione del primo riquadro, mentre i riquadri successivi no.

La variabile $ PS1 è stata onorata per apparentemente tutti gli aspetti tranne la colorazione di uno dei campi.

Qualcuno ha qualche idea?


Prova le virgolette singole
Kevin,

5
L' PS1impostazione che hai pubblicato non ha alcun comando per cambiare i colori. Pubblica un'impostazione effettiva che funziona al di fuori di tmux. Inoltre, si dovrebbe impostare PS1in .bashrc, non in .bash_profile: .bash_profilepotrebbe non ottenere eseguito a tutti, e le impostazioni potrebbero essere sovrascritte in seguito.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


3

La tua PS1 mi dà anche un output in bianco e nero.

Comunque tornare al mio mi dà colore, quindi dovresti essere in grado di capire i diversi, che uso

$ echo $PS1
\[\033[01;31m\]\t \[\033[01;32m\]durrantm \[\033[02;36m\]\h \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"` \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$

git_branch è una funzione bash che ho che è:

git_branch () { 
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

Il tuo contro il mio:

inserisci qui la descrizione dell'immagine

Funziona allo stesso modo su OSX e Ubuntu


10

La mia soluzione a questo problema era l'impostazione

force_color_prompt=yes

nel mio .bashrc. Ora il mio prompt di tmux ha colore.


Non sono sicuro del perché questo si comporti in modo diverso rispetto a quello esterno, ma questo ha funzionato anche per me.
Matt Lacey,

In questo caso dovresti specificare questo: quello che devi fare è eseguire il comando tmuxe poi all'interno di una sessione di tmux source ~/.bashrc. Devi farlo in ogni pannello.
evaristegd,

Grazie, questo lavoro per me anche su Ubuntu 18.04 gnome-terminal.
Intijk,

1

Sulla mia macchina la soluzione è quella di aggiungere

set -g default-terminal "xterm-256color"

a ~/.tmux.conf.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.