Перейти к содержанию

Bash

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

Выводим красивые нотификации средствами Bash

И снова здравствуйте!

Давно хотел реализовать функцию на Bash, чтобы красиво выводить какие-то значимые уведомления в терминал по типу как это сделано в npm.

Обычное echo уже не возбуждает, ничего не поделаешь. Да и всякие Gum тоже ставить не хочется.

Подводные камни в Bash №9

Команда if [ bar = "$foo" ]; проверяет, равны ли два значения.

Тут самое важно это — пробелы, про кавычки повторять не буду, ты это уже и так знаешь. Все уши прожужал.

Неправильно:

[bar="$foo"] 
[ bar="$foo" ]
[[bar="$foo"]]
  1. Нельзя слеплять всё вместе. Это хуёва даже в плане кодстайла.
  2. Нет пробела вокруг знака «=».
  3. Аналогично, всё слеплено.

Подводные камни в Bash №8

Вот те на!

if [ false ]; then echo "HELP"; fi

Большинство думает, что [ — это часть команды if как скобки в других языках программирования. Но нихуя!

В Bash if просто запускает команду. Команда [ ... ] — это обычный бинарник, аналогично команде test, а не специальный синтаксис.

Скобка ] нужна только для красоты и завершения команды [.

Подводные камни в Bash №7

Продолжаем делать правильно.

Этот код выглядит вполне нормально:

grep foo bar.txt | while read -r; do ((count++)); done

Он считает, сколько строк в файле bar.txt содержат слово foo.

Здесь главная проблема — переменная count не изменится вне цикла while, потому что в Bash каждая команда в пайплайне (|) запускается в отдельной оболочке (subshell). То есть count++ происходит «внутри», и снаружи этого не видно.

Подводные камни в Bash №6

Если написать так [[ $foo > 7 ]], то далеко не факт что это правильно отработает.

Двойные скобки [[ ... ]] в Bash предназначен для проверки условий, но не для работы с числами. Для чисел лучше хуячить (( ... )).