Этот вопрос является продолжением https://unix.stackexchange.com/questions/126955/percent-in-path-environment-variable. Я размещаю его здесь, так как он более специфичен для дистрибутива.
Оболочка, используемая по умолчанию для sh, а именно тире, не совместима с execvp, потому что она работает с переменной $ PATH. Стандартный способ борьбы со странными именами файлов - использовать схему кодирования URL. Теперь я не могу использовать этот стандарт, потому что резервные резервы%. Для решения этой проблемы у меня есть следующие опции
Рекомендуйте моим пользователям Ubuntu изменить символическую ссылку / bin / sh на что-то другое, например bash. Это необходимо сделать глобально, поскольку popen (3) полагается на / bin / sh. Отклонитесь от традиционной кодировки URL, используя что-то другое, кроме%. Выбрасывайте ошибку, когда появляется любой из запрещенных символов (да, Windows, но это ограничение является нормальным в конфигурации с двойной загрузкой).В идеале я предпочитаю вариант (1), кажется, лучший способ. Это позволяет использовать стандартную схему эвакуации в именах файлов. Однако, поскольку тире явно ведет себя по-другому, чем некоторые другие оболочки, он разбивает систему, если какой-либо из системных скриптов полагается на функциональность, уникальную для тире. Кроме того, он требует, чтобы у пользователя были привилегии root.
Опция (2) подразумевает, что я должен найти другой символ, который нигде не сталкивается. Конечно, какая-то оболочка может испортить любой символ, который не является буквой.
Опция (3) подразумевает слишком большое сокращение функциональности