Семь неожиданных переменных Bash

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Продолжая серию заметок о менее известных функциях bash, покажу вам семь переменных, о которых вы могли не знать.

1) PROMPT_COMMAND


Возможно, вы уже в курсе, как манипулировать приглашением prompt, чтобы показать различную полезную информацию, но не все знают, что каждый раз при показе приглашения можно запускать команду оболочки.

На самом деле многие сложные манипуляторы prompt используют эту переменную, чтобы выполнять команды для сбора информации, которая отображается в приглашении.

Попробуйте запустить это в новом шелле, и увидите, что произойдёт с сессией:

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

2) HISTTIMEFORMAT


Если запустить history в консоли, вы получите список команд, ранее выполненных под вашей учётной записью.

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

Как только установлена эта переменная, новые записи записывают время вместе с командой, поэтому выдача будет выглядеть так:

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 -

Форматирование соответствует символам из man date.

3) CDPATH


Чтобы сэкономить время в командной строке, можете использовать эту переменную для изменения каталогов так же легко, как вы вызываете команды.

Как и PATH, переменная CDPATH представляет собой список путей, разделённых двоеточием. Когда вы запускаете команду cd с относительным путём (т. е. без слэша в начале), по умолчанию оболочка ищет в вашей локальной папке соответствующие имена. CDPATH будет искать в путях, которые вы дали для каталога, куда хотите перейти.

Если установить CDPATH таким образом:

$ CDPATH=/:/lib

а затем ввести:

$ cd /home
$ cd tmp

то вы всегда попадёте в /tmp независимо от того, где находитесь.

Однако осторожно, потому что если не указать в списке локальную (.) папку, то вы не сможете создать любую другую папку tmp и перейти к ней, как обычно:

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

Упс!

Это похоже на путаницу, которую я почувствовал, когда понял, что локальная папка не была включена в более знакомую переменную PATH… но вы должны сделать это в переменной PATH, потому что вас могут обмануть, запустив фейковую команду из какого-нибудь скачанного кода.

Моя устанавливается начальной точкой:

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

4) SHLVL


Вы когда-нибудь задумывались, ввод exit выведет вас из текущей оболочки bash в другую «родительскую» оболочку или просто полностью закроет окно консоли?

Эта переменная отслеживает, насколько глубоко вы вложены в оболочку bash. Если создать новый терминал, то он установлен на 1:

$ echo $SHLVL
1

Затем, если запустить другой процесс оболочки, число увеличивается:

$ bash
$ echo $SHLVL
2

Это может быть очень полезно в скриптах, где вы не уверены, следует выходить или нет, или отслеживать, где вы находитесь по вложенности.

5) LINENO


Также для анализа текущего состояния и отладки полезна переменная LINENO, которая сообщает количество команд, выполненных в сеансе к настоящему моменту:

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

Это чаще всего используется при отладке скриптов. Вставляя такие строки, как echo DEBUG:$LINENO, вы можете быстро определить, где в скрипте вы находитесь (или нет).

6) REPLY


Если, как я, вы обычно пишете такой код:

$ read input
echo do something with $input

то может стать сюрпризом, что не нужно вообще беспокоиться о создании переменной:

$ read
echo do something with $REPLY

Это делает то же самое.

7) TMOUT


Чтобы не оставаться на производственных серверах слишком долго в целях безопасности или случайно не запустить что-нибудь опасное в неправильном терминале, то установка этой переменной действует как защита.

Если ничего не вводится в течение установленного количества секунд, происходит выход из оболочки.

То есть это альтернатива sleep 1 && exit:

$ TMOUT=1
Источник: https://habr.com/ru/post/451492/


Интересные статьи

Интересные статьи

Вольный перевод статьи «7 Best Practice Tips for PostgreSQL Bulk Data Loading» Иногда возникает необходимость в несколько простых шагов загрузить в БД PostgreSQL большой объём данных...
Компании переполнили рынок товаров и услуг предложениями. Разнообразие наблюдается не только в офлайне, но и в интернете. Достаточно вбить в поисковик любой запрос, чтобы получить подтверждение насыще...
В начале карьеры разработчика часто бывает страшновато: перед тобой встают незнакомые проблемы, многому нужно научиться и приходится принимать сложные решения. И в некоторых случаях мы в этих реш...
На текущий момент более 35 дней длится полет аппарата «Берешит», пройдено более 5 миллионов километров, чуть больше 13 дней осталось до посадки на Луну, которая запланирована на 11 апреля 201...
Сегодня мы поговорим о перспективах становления Битрикс-разработчика и об этапах этого пути. Статья не претендует на абсолютную истину, но даёт жизненные ориентиры.