Не переношу жару, черт его знает как в детстве мы сидели во дворе и пили водку на солнце в +45 градусов, сейчас бы я так не смог.
Сегодня будем проводить ректальное тестирование переменной PATH с помощью кишки.
( set -f; IFS=':'; for i in ${PATH:?'хуй с маслом'};do [[ -r "$i" && -d "$i/." ]] || echo "$i";done )
Разбор команды
Давай разберем каждый элемент отдельно:
set -f
Отключает функцию pathname expansion (или globbing). Это предотвращает интерпретацию символов *, ? и [] как шаблонов имен файлов.
IFS=':'
Устанавливает разделитель полей (Internal Field Separator, IFS) на двоеточие «:». Это необходимо для правильного разбора переменной PATH, где пути разделены двоеточием.
for i in ${PATH:?'хуй с маслом'}
Запускает цикл for, который перебирает каждый элемент переменной PATH. Выражение${PATH:?'empty path'}проверяет, что переменная PATH не пустая; если она пустая, выводится сообщение «хуй с маслом» и выполнение прерывается.
do [[ -r "$i" && -d "$i/." ]] || echo "$i"; done
Внутри цикла проверяется каждый элемент «i» из PATH.
[[ -r "$i" && -d "$i/." ]]
Проверяет, существует ли каталог (-d "$i/.") и доступен ли он для чтения (-r "$i").
|| echo "$i"
Если каталог не существует или недоступен для чтения, то выводится значение «i» (путь).
Думаю более-менее понятно. Если видишь огромную кишку, разбивай её на части и тогда с ней проще будет разобраться.
В общем суть такая — если переменная PATH не установлена или пустая, команда завершится и будет выдано сообщение «хуй с маслом».
Поля переменной PATH отображаются на экране, если не соответствуют минимальным требованиям, или являются нулевыми. Bash будет искать в текущей директории.
Минимальные требования.
Каждый элемент пути должен иметь бит исполнения. Последний элемент должен быть каталогом и обладать разрешением на чтение, исполнение.
Для запуска программы достаточно, чтоб исполняемый файл программы имел бит исполнения и все каталоги в пути имели бит исполнения, чтения (не требуется если указываете полный путь до исполняемого файла).
У меня например после запуска кишки, выдало:
/snap/bin
Для исследования путей удобно использовать команду namei.
namei -m /etc
f: /etc
drwxr-xr-x /
drwxr-xr-x etc
Ну а так вроде всё, изучай!








Комментарии
Виджет комментариев загружается с серверов Telegram и может использовать cookies. Разрешите внешние сервисы, чтобы открыть обсуждение.