Kontynuując serię notatek o basha, pokażę ci siedem zmiennych, o których mogłeś nie wiedzieć.
1) PROMPT_COMMAND
Prawdopodobnie już wiesz, jak manipulować zaproszeniem prompt, aby wyświetlać różne przydatne informacje, ale nie wszyscy wiedzą, że za każdym razem, gdy wyświetlane jest zaproszenie, można uruchomić polecenie powłoki.
W rzeczywistości wiele skomplikowanych manipulatorów prompt wykorzystuje tę zmienną do wykonywania poleceń zbierających informacje, które są wyświetlane w zaproszeniu.
Spróbuj uruchomić to w nowej powłoce, a zobaczysz, co się stanie z sesją:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'2) HISTTIMEFORMAT
Jeśli uruchomisz historia w konsoli, otrzymasz listę poleceń, które wcześniej wykonałeś na swoim koncie.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T 'Gdy tylko ta zmienna jest ustawiona, nowe wpisy zapisują czas razem z poleceniem, więc wyjście będzie wyglądać tak:
1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su -
Formatowanie odpowiada symbolom z man date.
3) CDPATH
Aby zaoszczędzić czas w wierszu polecenia, możesz użyć tej zmiennej do zmiany katalogów tak łatwo, jak wywołujesz polecenia.
Jak i ŚCIEŻKA, zmienna CDPATH jest listą ścieżek oddzielonych dwukropkiem. Kiedy uruchamiasz polecenie cd z względną ścieżką (tzn. bez ukośnika na początku), powłoka domyślnie szuka w twoim lokalnym folderze odpowiednich nazw. CDPATH będzie szukać w ścieżkach, które podałeś dla katalogu, do którego chcesz przejść.
Jeśli ustawisz CDPATH w ten sposób:
$ CDPATH=/:/liba następnie wpiszesz:
$ cd /home
$ cd tmp to zawsze trafisz w /tmp niezależnie od tego, gdzie jesteś.
Jednak ostrożnie, ponieważ jeśli nie uwzględnisz w liście lokalnego (.) folderu, to nie będziesz mógł utworzyć żadnego innego folderu tmp i przejść do niego, jak zwykle:
$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmpUps!
Wygląda to na pomyłkę, którą poczułem, gdy zrozumiałem, że lokalny folder nie został uwzględniony w bardziej znanej zmiennej ŚCIEŻKA… ale musisz to zrobić w zmiennej PATH, bo mogą cię oszukać, uruchamiając fałszywe polecenie z jakiegoś pobranego kodu.
Moja ustawia się jako punkt wyjścia:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt4) SHLVL
Czy kiedykolwiek zastanawiałeś się, wprowadzając exit wyprowadzi cię z bieżącej powłoki bash do innej "rodzicielskiej" powłoki lub po prostu zamknie okno konsoli?
Ta zmienna śledzi, jak głęboko jesteś zagnieżdżony w powłoce bash. Przy utworzeniu nowego terminala jest ustawiona na 1:
$ echo $SHLVL
1Następnie, jeśli uruchomisz inny proces powłoki, liczba wzrasta:
$ bash
$ echo $SHLVL
2Może to być bardzo przydatne w skryptach, w których nie jesteś pewien, czy powinieneś wyjść, czy też śledzić, gdzie się znajdujesz w zagnieżdżeniu.
5) LINENO
Również z perspektywy analizy aktualnego stanu i debugowania przydatna jest zmienna LINENO, która informuje o liczbie poleceń wykonanych w sesji do tej pory:
$ bash
$ echo $LINENO
1
$ echo $LINENO
2 Jest to najczęściej używane podczas debugowania skryptów. Wstawiając takie linie jak echo DEBUG:$LINENO, możesz szybko ustalić, gdzie w skrypcie się znajdujesz (lub nie).
6) REPLY
Jeśli, jak ja, zazwyczaj piszesz taki kod:
$ read input
echo zrób coś z $inputmoże cię zaskoczyć, że nie musisz się w ogóle martwić o tworzenie zmiennej:
$ read
echo zrób coś z $REPLYDziała to tak samo.
7) TMOUT
Aby nie pozostawać na serwerach produkcyjnych zbyt długo z powodów bezpieczeństwa lub przypadkowo nie uruchomić czegoś niebezpiecznego w niewłaściwym terminalu, ustawienie tej zmiennej działa jak zabezpieczenie.
Jeśli nic nie jest wprowadzane przez ustaloną liczbę sekund, następuje wyjście z powłoki.
To znaczy, że jest to alternatywa dla sleep 1 && exit:
$ TMOUT=1Źródło: habr.com
