Siedem nieoczekiwanych zmiennych Bash

Kontynuując serię notatek o mniej znanych funkcjach 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=/:/lib

a 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
/tmp

Ups!

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:/opt

4) 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
1

Następnie, jeśli uruchomisz inny proces powłoki, liczba wzrasta:

$ bash
$ echo $SHLVL
2

Moż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 $input

może cię zaskoczyć, że nie musisz się w ogóle martwić o tworzenie zmiennej:

$ read
echo zrób coś z $REPLY

Dział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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster