В наши дни Linux стал де-факто операционной системой, особенно для серверов. Большинство из нас используют операционные системы Linux почти каждый день, и возникла необходимость понять эту ОС от самых основ до ее ядра. Несмотря на то, что в Интернете доступно множество руководств и сообщений, которые могут помочь нам узнать больше о Linux, в этом посте я расскажу о нескольких не очень популярных и некоторых очень распространенных синтаксисах, используемых для сценариев bash.

Bash-скрипт начинается

В большинстве bash-скриптов, которые вы, возможно, читали или писали, следующие три строки:

set -o errexit
set -o pipefail
set -o nounset

set -o errexit также равно set -e, что означает, что в случае сбоя какой-либо из команд в нашем скрипте bash выполнение всего скрипта завершится ошибкой. Этот вариант очень удобен, если у вас запущено несколько сценариев как часть конвейеров автоматизации или доставки.

set -o pipefail используется для выхода из вашего сценария, если какая-либо из команд канала не работает во время выполнения сценария bash. В противном случае вас встретят с неправильными кодами выхода, когда код передается по конвейеру.

set -o nounset также равно set -u, что означает, что скрипт завершится, если какая-либо из ваших переменных не установлена.

Использование команд pushd и popd

Часто вы бы видели две команды pushd и popd, используемые в любом сценарии bash (пример). Эти две команды являются встроенными командами оболочки, которые позволяют управлять использованием стека каталогов. Они используются для смены каталогов и возврата к ним при необходимости. Допустим, мы сейчас находимся в каталоге с именем k8s_practice,

$ pwd
~/k8s_practice

Теперь я перейду в другой каталог с именем git-clones,

$ pushd ~/git-clones
~/git-clones ~/k8s_practice
$ pwd
~/git-clones

И при использовании popd мы можем просто открыть текущий каталог и вернуться к предыдущему каталогу k8s_practice,

$ popd
~/k8s_practice
$ pwd
~/k8s_practice

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

За гранью бесконечности: /dev/null

Бьюсь об заклад, вы видели следующий синтаксис: во многих bash-скриптах

» /dev/null 2›&1

Этот синтаксис в основном является более коротким способом отключения процесса. Можно даже написать так: 2›&

» /dev/null перенаправляет стандартный вывод (stdout) на /dev/null, который в конечном итоге отбрасывает его. /dev/null — это темное место (специальный файл) ОС Linux, в котором все, что в него записывается, в конечном итоге выбрасывается в пустоту или отправляется в черную дыру. И 2›&1 перенаправляет стандартную ошибку на стандартный вывод, который в конечном итоге отбрасывает ее. & здесь указывает файловый дескриптор, так как их три — стандартный ввод, вывод и ошибка.

Итак, это было несколько основных советов, которые, я надеюсь, вы запомните или, возможно, обратите на них внимание при написании вашего следующего скрипта bash.