Охохо, привет! Размазывать бытовуху не буду, сразу к делу. В Bash есть офигительная команда, называется она readonly. С помощью неё ты сможешь защитить любую переменную от изменения. Получается этакая константа, которую довольно сложно перезаписать.

И не дай бог кто-то решит её перезаписать, получит в лоб ошибкой:

bash: VAR: readonly variable

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

Оказалось, всё очень даже очевидно. Этот скуфяра мало того, что применил ООП в скриптах (это пиздец), так ещё и воспользовался readonly. Спасибо тебе, дорогой друг. Надеюсь, на новом месте тебе такого с кубернейтсами не позволяют делать. Диверсант, блядь.

Ладно. Теперь про readonly. Если не можем победить, значит, нужно изучить и победить. Это как в анекдоте 18+:

Анекдот 18+
Я ебу всё, что движется, а всё, что не движется, я двигаю и ебу.

Поехали двигать!

Переменная защищается так:

readonly VAR=1234

Если её попытаться переопределить, то моментально отправляешься в пешее эротическое. Возникает логичный вопрос — как её откатить обратно и сделать нормальной переменной?

В голову приходит логичный ответ, сделай так:

unset VAR

А вот и нет! Сразу получишь хуем ошибкой по башке: bash: unset: VAR: cannot unset: readonly variable.

Хм… интересное кино. А чё делать? Не использовать readonly! Ну а если пришлось с этим столкнуться, придётся использовать древнюю магию. Мы её, кстати, недавно использовали в этом посте.

Чтобы заансетить константу, открываем «Ящик Пандоры»:

gdb -ex 'call (int) unbind_variable("VAR")' --pid=$$ --batch

Если получил $1 = 0, значит, всё прошло успешно.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Такими консервированными переменными хорошо манипулировать во всяких конфигах, например в .bashrc и т. п.

Если кто-то захочет что-то переопределить, у него ничего не получится. Защита от дурака. Но помни, что древняя магия GDB может не сработать на этом проклятии, если ты не root.

Например, можно защитить переменную PATH от вмешательств, и ни одна собака её не зареврайтит. И порой даже ты сам.

В общем, изучай. Хороших тебе предстоящих выходных и береги себя!