LINUX.ORG.RU

Функции для превращения плохого пути (с пробелами, etc) в хороший


0

0

Т.е. такой, который можно было бы передать команде shell.
Например, у меня есть директория
"/home/myself/my favorive files/Мой песик.jpg/Rock'n'Roll"
Я хочу передать ее имя ls-у из своей программы на С.
Так вот, вопрос заключается в следующим: как корректно заэкранировать плохие символы? Есть ли стандартные функции на данной платформе (пусть линукс), которые занимаются этим? Если нет, то как узнать весь список плохих символов?

Огромное спасибо за любую помощь.

anonymous

А где в твоей строке символы, которые ты посчитал за "плохие" и кот-е нужно убрать? Лучше сделай проверку возвращаемого значения от процедуры - куда ты посылаешь это все, ведь если символы - плохие - значит и строка некорректна, в следствии чего ls (или что там) не выполниться и вернеть код ошибки. А если ты эти символы уберешь - то строка все равно неверной будет ;) Лучше поподробнее, плз раскажи.

anonymous
()

а в чем собственно проблема?
через что ты вызываешь ls?
если через system() то так и передовай в двойных ковычках . Как экранировать в С символы думаю не нужно объяснять.
Если запускаешь через execve() то там кажется даже ковычек не нужно ставить
В общем пришли проблемный кусок кода, а то не совсем ясна проблема

Dead ★★★★
()

Есть программа, которая может запускаться из командной строки, а может - как shared library, через торчащую из нее функцию, которой передается командная строка. Если передать этой функции командную строку с именами файлов, содержащие, например, пробелы, она посчитает, что это несколько аргументов, разделенный пробелами. Вот, в bash такие символы экранируются слешами, т.е. нужно ls-у говорить так:

ls /home/myself/my\ favorive\ files/Мой\ песик.jpg/Rock\'n\'Roll

Как же правильно сделать это? Может быть, нужно экранировать ТОЛЬКО пробелы, а остальные символы можно передавать как есть?

anonymous
()

а что мешает вызывать вот так? ls "/home/myself/my favorive files/Мой песик.jpg/Rock'n'Roll" bash это прекрасно понимает.

Dead ★★★★
()

Ну ладно, а если не ls, а что-то другое, что не понимает? Ну, вот MC, например, когда говоришь Meta-Enter на файле с пробелами, лепит перед ними слеши.

anonymous
()

да
MC лепит
но помоему можно и так
сколько помню, это всегда работало

все это экранирование работает, только если вызывать команду через shell
к примеру если используется execve то там вобще ничего экранировать не нужно.

Одним словом сначала попробуй ...


Dead ★★★★
()

Ну ладно, спасибо за объяснения.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.