Простое решение для обработки специальных символов при вводе сценария оболочки - PullRequest
2 голосов
/ 05 июня 2011

У меня есть скрипт, который может перезаписывать значения в файле конфигурации с помощью опций, например, опция --password может перезаписывать настройки в файле конфигурации (обратите внимание, это не обсуждение безопасности).Однако пароль может содержать символы, которые bash распознаются как специальные символы, и эти символы необходимо экранировать или помещать в "".

Теперь я понимаю это.Хотя я не могу сказать, кто будет использовать этот сценарий в будущем, поэтому я хотел бы избавить его от необходимости иметь неправильный пароль просто потому, что он или она забыли разместить пароль внутри "" или избежать специальногосимвол.

Как лучше всего справиться с таким вводом?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 05 июня 2011

Хм .. Двойных кавычек недостаточно. Необходимо использовать одинарные кавычки, потому что редкая ситуация, например

mycommand --password "AAA$PWD" #is worng for any exported environment varname
mycommand --password 'AAA$PWD' #ok

Здесь никоим образом избегайте этого, потому что ваши пользователи используют своего рода оболочку, в которой есть переменные расширения и мета-глобализация Ваша команда получает уже развернутые аргументы, так что это никак не отражается в вашем скрипте.

Единственный способ - как сказал @Bohemian выше - чтение пароля из tty. Вы можете написать простую обертку вокруг вашего текущего скрипта, которая будет считывать пароль из tty, а затем выполнит ваш скрипт с правильно экранированным аргументом --pasword.

0 голосов
/ 17 августа 2012

Существует простое, но не очень интуитивное решение.

Инкапсулируйте символ, который вызывает проблему с «CARACTER».И поместите всю строку пароля в одинарные кавычки.

В моем случае символ, который вызывал проблему, был '(одинарная кавычка).

Так что если у меня есть такая команда:1007 *

mycommand --password 'AAA'PWD' 

Заменить на:

mycommand --password 'AAA'"'"'PWD'

Теперь мой пароль - это объединение трех строк.Пояснение:

'AAA' + "'" + 'PWD' # plus sign is just to make clear the contatenation.

Это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...