Siedem nieoczekiwanych zmiennych Bash

Kontynuacja serii notatek dot mniej znany Funkcje bash, pokażę ci siedem zmiennych, o których możesz nie wiedzieć.

1) PROMPT_COMMAND

Być może już wiesz, jak manipulować monitem, aby wyświetlić różne przydatne informacje, ale nie wszyscy wiedzą, że za każdym razem, gdy zostanie wyświetlony monit, możesz uruchomić polecenie powłoki.

W rzeczywistości wiele skomplikowanych manipulatorów podpowiedzi używa tej zmiennej do wykonywania poleceń w celu gromadzenia informacji wyświetlanych w podpowiedzi.

Spróbuj uruchomić to w nowej powłoce i zobacz, co stanie się z sesją:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Jeśli biegniesz history w konsoli otrzymasz listę poleceń wykonanych wcześniej w ramach Twojego konta.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Po ustawieniu tej zmiennej nowe wpisy rejestrują czas wraz z poleceniem, więc wynik będzie wyglądał następująco:

1871 Uruchomiłem to o: 01 05:19:13 cat /etc/resolv.conf 38 Uruchomiłem to o: 07 1872:01:05 curl bbc.co.uk 19 Uruchomiłem to o : 13/38/19 1873:01:05 Sudo vi /etc/resolv.conf 19 Uruchomiłem to o: 13/38/41 1874:01:05 curl -vvv bbc.co.uk 19 Uruchomiłem to o: 13 /39/18 1876:01:05 sudo su -

Formatowanie dopasowuje znaki z man date.

3) CDPATH

Aby zaoszczędzić czas w wierszu poleceń, możesz użyć tej zmiennej do zmiany katalogów równie łatwo, jak wydawanie poleceń.

jako PATH, zmienny CDPATH to lista ścieżek oddzielonych dwukropkami. Po uruchomieniu polecenia cd ze ścieżką względną (tzn. bez ukośnika wiodącego), powłoka domyślnie szuka pasujących nazw w folderze lokalnym. CDPATH wyszuka w podanych ścieżkach katalog, do którego chcesz się udać.

Jeśli zainstalujesz CDPATH w ten sposób:

$ CDPATH=/:/lib

a następnie wpisz:

$ cd /home
$ cd tmp

wtedy zawsze skończysz /tmp nieważne gdzie jesteś.

Należy jednak zachować ostrożność, ponieważ jeśli nie określisz na liście lokalnego (.), wówczas nie będzie możliwości utworzenia żadnego innego folderu tmp i przejdź do tego jak zwykle:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Ups!

Jest to podobne do zamieszania, które poczułem, gdy zdałem sobie sprawę, że folder lokalny nie został uwzględniony w bardziej znanej zmiennej PATH... ale musisz to zrobić w zmiennej PATH, ponieważ możesz zostać oszukany i uruchomić fałszywe polecenie z pobranego kodu.

Mój jest ustawiony przez punkt początkowy:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Czy kiedykolwiek zastanawiałeś się, pisząc exit czy przeniesie Cię z bieżącej powłoki bash do innej powłoki „nadrzędnej”, czy po prostu całkowicie zamknie okno konsoli?

Ta zmienna śledzi, jak głęboko jesteś zagnieżdżony w powłoce bash. Jeśli utworzysz nowy terminal, zostanie on ustawiony na 1:

$ echo $SHLVL
1

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

$ bash
$ echo $SHLVL
2

Może to być bardzo przydatne w skryptach, w których nie jesteś pewien, czy wyjść, czy nie, lub śledzić, gdzie jesteś zagnieżdżony.

5) LINENO

Zmienna jest również przydatna do analizy bieżącego stanu i debugowania LINENO, który raportuje liczbę poleceń wykonanych do tej pory w sesji:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Jest to najczęściej używane podczas debugowania skryptów. Wstawianie linii np echo DEBUG:$LINENO, możesz szybko określić, w którym miejscu skryptu się znajdujesz (lub nie).

6) REPLY

Jeśli, podobnie jak ja, zwykle piszesz taki kod:

$ read input
echo do something with $input

Może zaskoczyć fakt, że w ogóle nie musisz się martwić o utworzenie zmiennej:

$ read
echo do something with $REPLY

To robi to samo.

7) TMOUT

Aby uniknąć zbyt długiego przebywania na serwerach produkcyjnych ze względów bezpieczeństwa lub przypadkowego uruchomienia czegoś niebezpiecznego na niewłaściwym terminalu, ustawienie tej zmiennej działa jako zabezpieczenie.

Jeśli przez określoną liczbę sekund nie zostanie wprowadzona żadna informacja, powłoka kończy działanie.

Oznacza to, że jest to alternatywa sleep 1 && exit:

$ TMOUT=1

Źródło: www.habr.com

Dodaj komentarz