Jak sprawić, by terminal wyświetlał użytkownika @ maszyna pogrubioną czcionką?


31

Widziałem na niektórych zrzutach ekranu (nie pamiętam, gdzie w Internecie), że terminal może wyświetlać [username@machine /]$pogrubione litery. Z niecierpliwością czekam na to, ponieważ zawsze przewijam długie wyniki, aby z trudem znaleźć pierwszą linię po moim poleceniu.

Jak mogę pogrubić lub pokolorować nazwę użytkownika itp.?


Czy możesz wyjaśnić, czy używasz powłoki bash, czy innej powłoki?
— Stephen Quan

Gnome Terminal bash.
— Benjamin

Odpowiedzi:


22

Powinieneś być w stanie to zrobić, ustawiając PS1zmienną pytania w swoim ~/.bashrcpliku w następujący sposób:

PS1='[\u@\h \w]\$ '

Aby był kolorowy (i być może pogrubiony - zależy to od tego, czy emulator terminalu go włączył), musisz dodać specjalne kody kolorów:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Tutaj wszystko, co nie ucieka między częściami 1;91mi, 0mzostanie zabarwione na 1;91kolor (pogrubiona czerwień). Umieść te kody ucieczki wokół różnych części monitu, aby użyć różnych kolorów, ale pamiętaj, aby zresetować kolory za pomocą, w 0mprzeciwnym razie będziesz mieć również kolorowe wyjście wyjściowe. Pamiętaj, aby później pobrać plik, aby zaktualizować bieżącą powłokę:source ~/.bashrc


Dlaczego nie użyć 31 dla czerwonego? 91 nie wydaje się być standardowym kodem.
— jw013

1
@ jw013 Zakres 90-97 jest równoważny zakresowi 30-37, jeśli jest użyty pogrubiony tj . 1;31i 1;91. Przy normalnej gramaturze czcionek zakres 90-97 daje jaśniejsze kolory niż inne.

45

Znajdź, gdzie PS1jest ustawiony .bashrci wstaw '\[\e[1m\]'na początku i \[\e[0m\]na końcu.

  • \[i \]są konieczne, aby powłoka wiedziała, że ​​bałagan w środku zajmuje 0 miejsca na ekranie, co zapobiega popsuciu się podczas edycji linii. Nie musisz się tym zbytnio przejmować.
  • \e[jest znany jako CSI (wprowadzający sekwencję kontrolną). Zobaczysz go w większości kodów wymienionych na odnośnej stronie Wikipedii. \e oznacza znak ucieczki.
  • Jeśli spojrzysz na tabelę SGR na stronie Wikipedii, zobaczysz, że 1 to liczba jasnego / pogrubionego tekstu, a 0 to reset. CSI 1mWłącza więc pogrubienie i CSI 0mresetuje czcionkę, dzięki czemu reszta tekstu jest normalna.

Wikipedia ma pełną listę kodów ucieczkowych ANSI , których można użyć, jeśli obsługuje je emulator terminala.

Edytować

Aby zapewnić przenośność i czytelność, należy używać tputzamiast kodowania kodów ucieczki na stałe. Jedynym minusem jest to, że tputpodejście nie działa z terminalami, które obsługują kody ANSI, ale mają uszkodzone lub brakujące bazy danych terminfo, ale w takim przypadku zepsute terminfo jest większym problemem, ponieważ wiele aplikacji konsolowych opartych na terminfo może nie działać poprawnie.

Oto przykład tego, co robię w moim .bashrc:

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

Oto jak mogłaby wyglądać moja uogólniona wersja. Jest 0to status wyjścia ostatniego polecenia.

Zrzut ekranu PS1


Ładna i wyjaśniająca odpowiedź, +1. Wciąż znalazłem odpowiedź hesse'a bardziej na temat, więc wybrałem ją zamiast tego.
— Benjamin

Kiedy spróbowałem, napotkałem problem, taki jak monit terminala niepoprawnie opakowany . Czy ty? Czy zaktualizowałeś sekwencje specjalne?
— Stefan Lasiewski

6

To jest domyślny monit wyświetlany w powłoce cygwin bash:

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

wprowadź opis zdjęcia tutaj

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

Referencje:


Fajnie, dodałem nową linię przed [user @ host], dzięki czemu każde polecenie jest jeszcze bardziej czytelne (powinno być ustawione tak domyślnie na terminalu imo).
— Benjamin

2

Używam tej funkcji powłoki, aby uzyskać atrybuty tekstu w terminalu:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

Następnie, aby go użyć:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

Daje mi to, [username@hostname]:cwd>gdzie username@hostnamesą odważne zielone i cwdodważne niebieskie.


Dzięki za to. Przypuszczam, że musiałem również skopiować wszystkie powyższe ~/.bashrc?
— Benjamin

Tak, ustawiam to w moim ~/.bashrcpliku i używam go, aby ustawić monit. Nawet zmieniam kolory w zależności od używanego systemu.
— Arcege

1

Aby wyglądało jak domyślny monit Ubuntu, dodaj

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

w twoim ~/.bashrc.

Spowoduje to wyświetlenie dobrze znanego zielonego user@host(pogrubionego), a następnie nie pogrubionego białego dwukropka, a następnie katalogu roboczego pogrubioną niebieską czcionką, a następnie $znaku, spacji i polecenia nie pogrubionymi białymi literami:

Podpowiedź Ubuntu Bash

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.