Ogranicz długość monitu powłoki bash

Kiedy używasz Terminala w wersjach 10.3 i 10.4, prawdopodobnie używasz powłoki bash — jest to ustawienie domyślne, chyba że używasz aktualizacji, która wcześniej korzystała z tcsh.

Jeśli nie wiesz, czym jest „powłoka”, w rzeczywistości jest to program, który działa i zapewnia interfejs, którego używasz podczas komunikacji z uniksową stroną systemu OS X za pośrednictwem terminala. W pierwszych wersjach OS X Apple ustawił domyślną powłokę na tcsz, ale przełączyłem na grzmotnąć wraz z wydaniem OS X 10.3 i nowszych.

Jedną z cech basha jest linia zachęty, która pokazuje bieżący katalog roboczy. Gdy przechodzisz do struktury plików, ciąg zachęty stale odzwierciedla bieżący katalog roboczy:

gargantua5:~ robg$ cd Library/gargantua5:~/Library robg$ cd Widgets/gargantua5:~/Library/Widgets robg$ cd WindGuru.wdgt/gargantua5:~/Library/Widgets/WindGuru.wdgt robg$

Chociaż w teorii jest to świetne, w praktyce może nie być tak wspaniałe. Zastanów się, co się stanie, gdy przejdziesz do głęboko zakopanego folderu systemowego, takiego jak ten:

gargantua5:/System/Library/CoreServices/Dock.app/Contents/Resources robg$

Jeśli masz 80-znakowe okno terminala, powyższa linia zachęty faktycznie zawija się całkowicie wokół szerokości ekranu. To sprawia, że ​​​​praca w Terminalu jest bardzo trudna, ponieważ ekran staje się mylącą mieszanką poleceń, wyświetlania ścieżek i danych wyjściowych. Istnieje wiele rozwiązań tego problemu, ale oto dwa, które mi się podobają.

W przypadku obu tych rozwiązań musisz użyć wi edytor, aby edytować użytkownika .bash_profil plik w swoim katalogu domowym. Uruchom Terminal i upewnij się, że jesteś w swoim katalogu domowym, wpisując płyta CD a następnie naciśnij klawisz Return. Następnie wpisz vi .bash_profile. Jeśli masz istniejący plik, zostanie on otwarty do edycji. Jeśli nie, otworzy się nowy plik. Stamtąd postępuj zgodnie z odpowiednim rozwiązaniem, jak wolisz.

Rozwiązanie 1: Użyj paska tytułu terminala

Zamiast wyświetlać ścieżkę w monicie, bash może wyświetlać monit w tytule okna terminala, na przykład:

Aby to zrobić, wystarczy dodać te dwie linie do pliku .bash_profil plik:

export PROMPT_COMMAND='echo -n "^[]1;$PWD^G"'PS1='e[7m [u] :[e[0;m] '

Jednak nie możesz po prostu skopiować i wkleić całego powyższego tekstu - druga linia będzie działać, ale pierwsza linia zawiera dwa specjalne "cytowane" polecenia. Oto jak go wprowadzić. Pierwsze naciśnięcie I położyć wi w trybie wstawiania.

Następnie skopiuj i wklej wszystko do pierwszej daszki, ale nie włączając (^). Następujące dwie postacie, ^[, reprezentują rzeczywisty klawisz Escape. Aby go wpisać wi, wpisz Control-V, a następnie naciśnij Escape. Spowoduje to wprowadzenie zakodowanych znaków klawisza Escape. Następnie możesz skopiować i wkleić wszystko do następnej karetki, ale znowu nie włączając. Wejść do ^ G, użyj tej samej procedury — naciśnij Control-V, a następnie naciśnij Control-G. Na koniec wpisz zamykający podwójny cudzysłów i pojedynczy cudzysłów. Uff.

Po wprowadzeniu dwóch wierszy naciśnij Escape, a następnie wpisz :w aby zapisać zmiany i :Q opuścić edytor. Otwórz nowe okno terminala i powinieneś zobaczyć ścieżkę w tytule oraz ładny krótki monit zawierający twoją nazwę użytkownika.

Nie będę próbował wyjaśniać voodoo zachodzącego w tych dwóch poleceniach, poza pierwszymi pracami nad ustawieniem tytuł okna, a drugi wykorzystuje niektóre kody ASCII do utworzenia czarno-białej wersji nazwy użytkownika jako podpowiedź. Zapisz plik, naciskając Escape Podczas gdy wiele osób preferuje ten ultra czysty monit ze ścieżką w tytule okna, znajduję I jak przynajmniej krótkie przypomnienie mojego bieżącego katalogu w moim monicie, co jest dokładnie tym, co otrzymasz w następnym rozwiązaniu.

Rozwiązanie 2: Ogranicz długość wyświetlanej ścieżki

Drugie rozwiązanie ogranicza ścieżkę podpowiedzi do określonej liczby znaków. Niezależnie od tego, jak głęboko zagłębisz się w system, w monicie zobaczysz tylko preferowaną liczbę znaków. Otworzyć .bash_profil plik, jak wyjaśniono powyżej, naciśnij I aby przejść do trybu wstawiania, a następnie wklej następujący kod:

function prompt_command { # Ile znaków $PWD powinno być przechowywanych lokalnie pwd_length=23 if [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ] then newPWD="$(echo -n $PWD | sed -e "s/.*(.{$pwd_length})/1/")" else newPWD="$(echo -n $PWD)" fi}PROMPT_COMMAND=prompt_commandexport PROMPT_COMMANDPS1='e[7m$newPWD [u]:[e[0;m] '

Zostaw wszystko tak, jak to widzisz, poza ewentualnie 23, która reprezentuje liczbę znaków, które chcesz zobaczyć w ścieżce monitu. Po zakończeniu naciśnij Escape, aby wyjść z trybu wstawiania, a następnie wpisz :w I :Q.

Podobnie jak w przypadku pierwszego rozwiązania, dzieje się tutaj jakieś fantazyjne voodoo, aby skrócić ścieżkę (tak robi ta funkcja), a następnie wyświetlić ją w monicie. Otwórz nowe okno Terminala i przejdź do głęboko zakopanego folderu, a powinieneś zobaczyć coś takiego:

Resources/English.lproj [robg]:

Chociaż nie jest to tak przydatne jak pełna ścieżka, przynajmniej przypomina mi, gdzie byłem, zanim wykonam następne polecenie.

  • Jul 30, 2023
  • 43
  • 0