Не переношу жару, черт его знает как в детстве мы сидели во дворе и пили водку на солнце в +45 градусов, сейчас бы я так не смог.

Сегодня будем проводить ректальное тестирование переменной PATH с помощью кишки.

( set -f; IFS=':'; for i in ${PATH:?'хуй с маслом'};do [[ -r "$i" && -d "$i/." ]] || echo "$i";done )
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Эта кишка проверяет элементы в переменной PATH. И выводит на экран те, которые не существуют, или к которым нет доступа на чтение.

Разбор команды

Давай разберем каждый элемент отдельно:

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
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Пошел смотреть и точно, в переменной PATH этот каталог указан, а физически его нет на диске.

Для исследования путей удобно использовать команду namei.

namei -m /etc

f: /etc
   drwxr-xr-x /
   drwxr-xr-x etc

Ну а так вроде всё, изучай!