Обнаружение точки с запятой в качестве аргумента командной строки в Linux - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь запустить приложение C ++, где я передаю ему несколько аргументов командной строки следующим образом:

./startServer -ip 10.78.242.4 tcpip{ldap=no;port=2435}

Приложение выходит из строя, поскольку оно не может получить правильный порт.Выполняя поиск в Интернете, я обнаружил, что ";"обрабатывается символом конца команды ( Точка с запятой в командной строке в linux ), поэтому все после этого игнорируется.Я также понимаю, что размещение его в кавычках будет работать нормально.Однако я не хочу навязывать это ограничение на размещение аргументов в кавычках на пользователях.Итак, я хочу знать, есть ли способ обработать ";"символ с массивом argv?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вам нужно , чтобы указать не только ;, но в общем случае также { и }:

./startServer -ip 10.78.242.4 'tcpip{ldap=no;port=2435}'

Если ваши пользователи должны ввестив этом сложном последнем аргументе их также можно привести в кавычки.

0 голосов
/ 06 июня 2018

Точка с запятой разделяет две команды, поэтому ваша командная строка эквивалентна

./startServer -ip 10.78.242.4 tcpip{ldap=no
port=2435}

Ваше приложение никогда не будет ничего знать ни о точке с запятой, ни о второй команде, они будут полностью обработаны оболочкой.Вы должны экранировать двоеточие обратной косой чертой или заключить его в кавычки.Другие символы, которые могут вызывать аналогичные проблемы, включают: $,\-#`'":*?()&|

Сложные строки гораздо проще передавать либо из файла, либо через стандартный ввод.

...