Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

7 незаменимых переменных Bash — уверен, что знаешь хотя бы половину?

Изучаешь Bash, но путаешься, что такое $0 или $EUID? Не понимаешь, чем отличаются $UID и $EUID? Сейчас раскрою, как работают эти переменные (и не только они), где их применить, и почему без них твой каждый скрипт буксует. Каждый день — свежие устройства и главные технологические новинки. В Bash всего несколько встроенных специальных параметров, и, по опыту, именно их применяю чаще остальных. Бывает нужно вывести путь к текущему скрипту — допустим, для красивой справки. Заметь: когда вызываешь ls --help, имя программы всегда видно в заголовке: Путь к своему скрипту получаешь через $0. Это стандарт POSIX, поэтому подходит не только для Bash: А чтобы получить только имя скрипта, достаточно написать: $(basename $0): Но учти: $0 иногда выдаёт неожиданные значения (например, если запускаешь через source /путь/скрипт.sh, вместо пути получишь просто "bash"). В таких случаях воспользуйся $BASH_SOURCE — она всегда покажет актуальный путь к скрипту, но работает только в Bash. Так что если твои с
Оглавление

Изучаешь Bash, но путаешься, что такое $0 или $EUID? Не понимаешь, чем отличаются $UID и $EUID? Сейчас раскрою, как работают эти переменные (и не только они), где их применить, и почему без них твой каждый скрипт буксует.

-2

HTG Wrapped 2025: 24 дня — только самые крутые гаджеты и технологии!

Каждый день — свежие устройства и главные технологические новинки.

Особые параметры Bash

В Bash всего несколько встроенных специальных параметров, и, по опыту, именно их применяю чаще остальных.

Как узнать путь до своего скрипта

Бывает нужно вывести путь к текущему скрипту — допустим, для красивой справки. Заметь: когда вызываешь ls --help, имя программы всегда видно в заголовке:

-3

Путь к своему скрипту получаешь через $0. Это стандарт POSIX, поэтому подходит не только для Bash:

-4

А чтобы получить только имя скрипта, достаточно написать: $(basename $0):

-5

Но учти: $0 иногда выдаёт неожиданные значения (например, если запускаешь через source /путь/скрипт.sh, вместо пути получишь просто "bash"). В таких случаях воспользуйся $BASH_SOURCE — она всегда покажет актуальный путь к скрипту, но работает только в Bash. Так что если твои скрипты заточены под Bash, пользуйся ей.

Как узнать, чем завершилась команда

Любая команда по завершении возвращает числовой статус (exit code). 0 значит «Успех», всё остальное — ошибка. Например, если сделать ls в несуществующей папке, вернётся не 0.

Посмотреть код завершения можно через $? — там всегда свежий результат последней команды.

-6

Учитывай этот код в ветвлениях или через конструкции case. Можно лаконично обрабатывать ошибки с помощью операторов && и ||.

Как работать с аргументами скрипта

Передавать параметры — обычное дело. Bash называет их «позиционными параметрами». Вот как с ними обращаться:

В основной части скрипта или внутри функций аргументы приходят прямо из командной строки: script.sh "первый" "второй".

Переменная "$@" — это все аргументы, каждый отдельно (реально удобно работать поштучно):

-7

"$*" — похожа, но все аргументы склеиваются в одну строку (если взять в кавычки):

-8

Запомни: "$@" — каждый аргумент по отдельности, "$*" — все в одну строку.

А чтобы узнать, сколько всего аргументов пришло, есть ${#@} и ${#*}:

-9

Переменные окружения

Это переменные, которые сама оболочка задаёт для всех программ. Например, $HOME всегда выдаёт путь в твой домашний каталог.

Как узнать свой идентификатор пользователя (UID)

Иногда скрипту нужен UID — твой цифровой идентификатор. Недавно у меня скрипт обращался к /run/user/1000 — где 1000 — это UID. Прописывать их вручную — плохая идея: у другого пользователя будет совсем другое число. Лучше определять UID на лету.

Есть две переменные: $UID и $EUID. $UID — это ID пользователя, запустившего скрипт. $EUID — эффективный ID (он может отличаться, если запускаешь через sudo или у тебя setuid-бинарник). Обычно совпадают, но если скрипт с повышенными правами — расходятся.

-10

Например, я запустил "sudo sleep 600" — видно, как UID и EUID меняются с "1000" на "0", когда команда становится root-процессом. В начале оба по "1000", в конце — оба по "0".

-11

8 трюков Linux shell, которые меняют твой подход к командам

Shell — это не только запуск программ. Смотри, как Bash сам «дописывает» твои команды и прокачивает скрипты на лету.

Вывод: для проверки прав root $UID и $EUID обычно совпадут — оба будут "0". Но знать разницу важно, если вдруг захочешь поработать с setuid-бинарниками или что-то замудрить с sudo.

Как безопасно узнать пути к пользовательским папкам

Почти каждый скрипт работает с домашним каталогом. Часто нужно лезть в ~/.config или ~/.local/share. Жёстко прописывать путь — плохая идея: у разных пользователей пути могут отличаться. Эксперты советуют стандарт XDG: переменные окружения, с которыми твой скрипт всегда найдёт правильную папку для настроек или данных.

-12

Не все XDG-переменные заполнены и не каждая из них — это путь. Некоторые могут быть пустыми.

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

Так твой скрипт не запнётся, даже если XDG-переменная не задана — путь всё равно будет валидным.

Подпишись на рассылку — практические Bash-советы каждую неделю!

Подпишись на рассылку — получай Bash-советы прямо в почту!

Чаще всего я использую такие переменные:

Есть и другие крутые варианты — не ленись пробовать всё новое. Не пихай данные бездумно в /tmp или случайно выбранную папку в ~/. Пользуйся стандартными переменными — с ними твои скрипты заработают на любом Linux.

-13

Как за секунду получить шпаргалку по любой команде в терминале Linux

Один маленький трюк экономит часы сидения в консоли.

Кроме всего перечисленного, в Bash есть ещё масса удобных переменных окружения. Активно их используй — и твои скрипты станут неубиваемыми, а рутина будет по плечу. Если забивать значения или пути вручную, где-то обязательно случится сбой. Лучше всегда полагаться на стандарт — сегодня ты в этом убедился.

Подытожу: освоишь стандартные bash-переменные — и твои скрипты перестанут ошибаться!

-14

3 приёма Bash, которые обязан знать каждый пользователь Linux

Разблокируй всю силу Bash этими простыми трюками!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: