BASH Tips&Trick #000E: Немного мутный источник

BASH
Я думаю, вы уже догадались о том, что речь пойдёт о встроенной в BASH команде source. Сегодня она мне доставила массу хлопот, позволив опытным путём найти то, что подробно описано в документации, а именно в man bash-builtins. Поскольку документацию мы, бывалые nix-админы, привычно читаем только тогда, когда уже совсем нет иного разумного выхода, я всё-таки поделюсь плодами своих изысканий.
Дело в том, что source оказался отдалённым подобием «интеллектуального» include в «больших» языках программирования, так что в частности эта команда умеет искать в «путях». Звучит вроде бы обыденно, но из этого вытекает 2 потенциально «неприятных» момента:
      1) Если вы хотите сделать source файла в текущем каталоге, вам нужно явным образом указать путь к нему, содержащий «слэш»: ./file.inc
      2) Не вполне очевидным образом для поиска файлов «без слэша», будет использована переменная PATH
В конечном итоге всё это означает, что если у вас в текущем каталоге есть include.inc и он же есть в одном из каталогов, перечисленных в PATH, будет в действительности подключен именно тот файл, что лежит в PATH.
К счастью, есть один простой способ избавиться от нелогичного поведения source: использовать директиву shopt -u sourcepath до команды source, — это отменит бессмысленный поиск по всем каталогам, указанным в переменной окружения, которая по идее к include-файлам не должна иметь ни малейшего отношения!

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.