Jak mogę skrócić mój wiersz poleceń (bash)?

167

Obecnie jest to:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

Poza zmianą nazwy mojej maszyny i struktury katalogów ...

Jak mogę sprawić, by było to coś więcej:

michael:controllers$
Michael Durrant
źródło

Odpowiedzi:

241

Aby to zmienić tylko dla bieżącej instancji terminala

Wystarczy wejść PS1='\u:\W\$ 'i nacisnąć enter.


Aby to zmienić „na stałe”

W swoim ~/.bashrcznajdź następującą sekcję:

if ["$ color_prompt" = tak]; następnie
    PS1 = „$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $ '
jeszcze
    PS1 = „$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $ '
fi

Usuń @\hi zamień na \wwielkie litery \W, aby stał się:

if ["$ color_prompt" = tak]; następnie
    PS1 = „$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
jeszcze
    PS1 = „$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $ '
fi

Zapisz, wyjdź, zamknij terminal i uruchom inny, aby zobaczyć wynik.


Ton więcej opcji!

  • Zobacz tutaj, aby uzyskać obszerniejsze instrukcje z wieloma dodatkowymi opcjami
  • Zobacz tę odpowiedź dotyczącą używania małego skryptu Python do ustawiania znaku zachęty, aby skrócenie występowało tylko wtedy, gdy użytkownik jest głęboko w strukturze katalogów.
ish
źródło
1
Możesz także uzyskać wiele informacji ... a następnie zwrot karetki na końcu, jak w unix.stackexchange.com/q/88780/10043
Michael Durrant
Czy istnieje sposób, aby uczynić to globalnym? Innymi słowy, jeśli sudo przejdzie do innego użytkownika, czy to ustawienie zostanie przeniesione, ale tylko dla siebie (tj. Nie dla użytkownika, gdy normalnie korzysta z konta)?
cytat z
Aby mieć wspólny plik .bashrc, który działa zarówno na systemie Linux, jak i OSX, od tego czasu przełączyłem się na unix.stackexchange.com/a/127800/10043
Michael Durrant
tj. HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Michael Durrant
ale zobacz odpowiedź na temat właściwego kodu do użycia.
Michael Durrant
104

Uruchom ten kod w bieżącym terminalu

PROMPT_DIRTRIM=3

Teraz monit bash wyświetli tylko 3 ostatnie nazwy katalogów. Możesz wybrać 1, aby wyświetlić tylko bieżący katalog. Więcej informacji jest dostępnych w dokumentacji GNU .

Efekt:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

Jeśli chcesz zrobić to na stałe, dodaj następujący wiersz ~/.bashrcna początku:

PROMPT_DIRTRIM=3

lub inna liczba większa niż zero.

Santosh Mahto
źródło
7
Tylko sidenote: To wymaga Bash 4.
Stefan Lasiewski
Fajnie ... Dodałem do tego bach_alias (z funkcją), promptdir() { PROMPT_DIRTRIM=$1; }aby ułatwić życie na żywo ...
dgoosens 17.08.18
18

To jest moje preferowane ustawienie zachęty:

dodano w ~/.bashrc

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

To wygląda tak:

[user@hostname dirname]$

(ze spacją po $znaku)

niezniszczalny
źródło
Jak dodać spację między każdym słowem? Czy mogę to pokolorować?
Daniel Springer
6

Osobiście wolę widzieć tylko bieżący folder w monicie bash. Mogę to zrobić za pomocą następującego polecenia:

PS1='\W\$ '

Jeśli chcesz, aby zadziałał po każdym uruchomieniu, dodaj powyższe polecenie do ~ / .bashrc.

Rajeev Jayaswal
źródło
1

Zdaję sobie sprawę, że to jest bardzo stare, ale ponieważ nikt nie sugerował utworzenia aliasu, pomyślałem, że opublikuję. Za pomocą Bash Prompt Escape Sequences stworzyłem aliasshorten

W tym ~/.bash_aliasesmiejscu zauważysz zmienną $ Blue, aby ustawić kolor podpowiedzi, który możesz pominąć lub zmienić w zależności od preferencji. Wyczyszczam również terminal, gdy dzwonię do skrótu.

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

Aby osiągnąć pożądany ciąg zachęty PO:

alias shorten='PS1="$USER:\W$ "'

Mam kolory zdefiniowane w ~/.bashrckopii i wklejone z https://wiki.archlinux.org/index.php/Color_Bash_Prompt . Na marginesie, co jest w kolorach kodu ansi? Jestem zmieszany, patrząc na to.

Blue='\e[0;34m'         # Blue
Allie Carver
źródło
Przewodnik krok po kroku byłby tak przydatny, ponieważ nie mam pojęcia, jak dostać się do .bash_aliases. Dzięki
Kayote
2
„.” przedrostek oznacza ukryty katalog lub plik. Tylda „~” jest krótką formą zmiennej $ HOME. Tak więc „~ / .bash_aliases” to tylko krótka forma „/home/$USER/.bash_aliases”. Aby otworzyć plik „.bash_aliases”, możesz albo otworzyć terminal i wpisać „gedit /home/$USER/.bash_aliases” lub „gedit ~ / .bash_aliases” lub w katalogu domowym wpisz ctrl-h, aby wyświetlić ukryte pliki i otworzyć plik bezpośrednio . Mam nadzieję, że to pomaga. Możesz także wyszukać w Google przydatne aliasy.
Allie Carver,
0

I napisał funkcji można modyfikować w zależności od potrzeb:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

Umieść tę funkcję na dole lub w pobliżu ~/.bashrcpo PS1pełnym obliczeniu linii.

Pisałbyś za termpromptkażdym razem, gdy chciałbyś skrócić swój znak zachęty lub, termpromptdzwoniłeś od dołu, by ~/.bashrcuzyskać trwały charakter.

Zaletą tej techniki w porównaniu z wieloma innymi odpowiedziami jest .bashrckonfiguracja PS1na cztery różne sposoby (xterm + brak koloru, xterm + kolor, no-xterm + brak koloru, no-xterm + kolor). Ta odpowiedź obsługuje wszystkie cztery obecne metody i prawdopodobnie także przyszłe metody.

Kolejną zaletą jest to, że ta metoda ma mniej skomplikowane kody kontrolne do przejścia w celu wprowadzenia zmian.

WinEunuuchs2Unix
źródło