Изучаешь Bash, но путаешься, что такое $0 или $EUID? Не понимаешь, чем отличаются $UID и $EUID? Сейчас раскрою, как работают эти переменные (и не только они), где их применить, и почему без них твой каждый скрипт буксует.
HTG Wrapped 2025: 24 дня — только самые крутые гаджеты и технологии!
Каждый день — свежие устройства и главные технологические новинки.
Особые параметры Bash
В Bash всего несколько встроенных специальных параметров, и, по опыту, именно их применяю чаще остальных.
Как узнать путь до своего скрипта
Бывает нужно вывести путь к текущему скрипту — допустим, для красивой справки. Заметь: когда вызываешь ls --help, имя программы всегда видно в заголовке:
Путь к своему скрипту получаешь через $0. Это стандарт POSIX, поэтому подходит не только для Bash:
А чтобы получить только имя скрипта, достаточно написать: $(basename $0):
Но учти: $0 иногда выдаёт неожиданные значения (например, если запускаешь через source /путь/скрипт.sh, вместо пути получишь просто "bash"). В таких случаях воспользуйся $BASH_SOURCE — она всегда покажет актуальный путь к скрипту, но работает только в Bash. Так что если твои скрипты заточены под Bash, пользуйся ей.
Как узнать, чем завершилась команда
Любая команда по завершении возвращает числовой статус (exit code). 0 значит «Успех», всё остальное — ошибка. Например, если сделать ls в несуществующей папке, вернётся не 0.
Посмотреть код завершения можно через $? — там всегда свежий результат последней команды.
Учитывай этот код в ветвлениях или через конструкции case. Можно лаконично обрабатывать ошибки с помощью операторов && и ||.
Как работать с аргументами скрипта
Передавать параметры — обычное дело. Bash называет их «позиционными параметрами». Вот как с ними обращаться:
В основной части скрипта или внутри функций аргументы приходят прямо из командной строки: script.sh "первый" "второй".
Переменная "$@" — это все аргументы, каждый отдельно (реально удобно работать поштучно):
"$*" — похожа, но все аргументы склеиваются в одну строку (если взять в кавычки):
Запомни: "$@" — каждый аргумент по отдельности, "$*" — все в одну строку.
А чтобы узнать, сколько всего аргументов пришло, есть ${#@} и ${#*}:
Переменные окружения
Это переменные, которые сама оболочка задаёт для всех программ. Например, $HOME всегда выдаёт путь в твой домашний каталог.
Как узнать свой идентификатор пользователя (UID)
Иногда скрипту нужен UID — твой цифровой идентификатор. Недавно у меня скрипт обращался к /run/user/1000 — где 1000 — это UID. Прописывать их вручную — плохая идея: у другого пользователя будет совсем другое число. Лучше определять UID на лету.
Есть две переменные: $UID и $EUID. $UID — это ID пользователя, запустившего скрипт. $EUID — эффективный ID (он может отличаться, если запускаешь через sudo или у тебя setuid-бинарник). Обычно совпадают, но если скрипт с повышенными правами — расходятся.
Например, я запустил "sudo sleep 600" — видно, как UID и EUID меняются с "1000" на "0", когда команда становится root-процессом. В начале оба по "1000", в конце — оба по "0".
8 трюков Linux shell, которые меняют твой подход к командам
Shell — это не только запуск программ. Смотри, как Bash сам «дописывает» твои команды и прокачивает скрипты на лету.
Вывод: для проверки прав root $UID и $EUID обычно совпадут — оба будут "0". Но знать разницу важно, если вдруг захочешь поработать с setuid-бинарниками или что-то замудрить с sudo.
Как безопасно узнать пути к пользовательским папкам
Почти каждый скрипт работает с домашним каталогом. Часто нужно лезть в ~/.config или ~/.local/share. Жёстко прописывать путь — плохая идея: у разных пользователей пути могут отличаться. Эксперты советуют стандарт XDG: переменные окружения, с которыми твой скрипт всегда найдёт правильную папку для настроек или данных.
Не все XDG-переменные заполнены и не каждая из них — это путь. Некоторые могут быть пустыми.
Используя XDG, всегда подставляй разумные значения по умолчанию:
Так твой скрипт не запнётся, даже если XDG-переменная не задана — путь всё равно будет валидным.
Подпишись на рассылку — практические Bash-советы каждую неделю!
Подпишись на рассылку — получай Bash-советы прямо в почту!
Чаще всего я использую такие переменные:
Есть и другие крутые варианты — не ленись пробовать всё новое. Не пихай данные бездумно в /tmp или случайно выбранную папку в ~/. Пользуйся стандартными переменными — с ними твои скрипты заработают на любом Linux.
Как за секунду получить шпаргалку по любой команде в терминале Linux
Один маленький трюк экономит часы сидения в консоли.
Кроме всего перечисленного, в Bash есть ещё масса удобных переменных окружения. Активно их используй — и твои скрипты станут неубиваемыми, а рутина будет по плечу. Если забивать значения или пути вручную, где-то обязательно случится сбой. Лучше всегда полагаться на стандарт — сегодня ты в этом убедился.
Подытожу: освоишь стандартные bash-переменные — и твои скрипты перестанут ошибаться!
3 приёма Bash, которые обязан знать каждый пользователь Linux
Разблокируй всю силу Bash этими простыми трюками!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru