linux - tag - ubuntu path to program




Как избежать двоеточия(:) в $ PATH на UNIX? (3)

Мне нужно проанализировать $PATH среды $PATH в моем приложении. Поэтому мне было интересно, какие символы эвакуации будут действительны в $PATH . Я создал тестовый каталог под названием /bin:d и создал тестовый скрипт, funny внутри него. Он работает, если я назову его абсолютным путем. Я просто не могу понять, как убежать : в $PATH я попытался обойти двоеточие с \ и обернуть его в одиночные и двойные кавычки. Но всегда, когда я запускаю, which funny он не может его найти. CentOS 6.


Вы можете попробовать mount его

mount /bin:d /bind
PATH=/bind

Глядя на функцию extract_colon_unit мне кажется, что это невозможно. Это : безоговорочно и неизбежно используется в качестве разделителя путей.

Ну, это действительно, по крайней мере, для bash . Другие оболочки могут отличаться.


Это невозможно в соответствии с стандартом POSIX. Это не функция конкретной оболочки, обработка PATH выполняется внутри функции execvp в библиотеке C. Для каких-либо цитат не предусмотрено никаких условий.

Именно по этой причине включение определенных символов (что-то не в «наборе символов переносимых файлов» - в качестве примера вызывается двоеточие).

Из SUSv7 :

Поскольку <colon> является разделителем в этом контексте, имена каталогов, которые могут использоваться в PATH, не должны содержать символ <colon> .

См. Также источник GLIBC execvp . Мы видим, что он использует функции strchrnul и memcpy для обработки компонентов PATH, без каких-либо условий для пропуска или отмены любого типа escape-символа.





environment-variables