Как передать аргумент с восклицательным знаком в Linux? - PullRequest
35 голосов
/ 27 июля 2010

У меня есть простой скрипт Python, который получает имя пользователя и пароль в качестве аргументов, но мой пароль содержит два восклицательных знака. Когда я называю свой сценарий как

salafek@dellboy:~/Desktop/$ emailsender.py -u username -p pass!!

команда, которую я ввел ранее, заменяет восклицательные знаки:

salafek@dellboy:~/Desktop/$emailsender.py -u username -p "passemailsender.py -u username -p passwget wget http://www.crobot.com.hr/templog"

Я могу экранировать восклицательные знаки обратной косой чертой (\), но мой пароль меняется.

Есть ли решение для этого, как я могу избежать восклицательных знаков без изменения пароля?

Ответы [ 4 ]

56 голосов
/ 27 июля 2010

Вы должны иметь возможность просто обернуть вещи в одинарные кавычки в оболочке.

$ emailsender.py -u username -p 'pass!!'
17 голосов
/ 27 июля 2010

Вам нужно экранировать с помощью \ или заключить в кавычки, в противном случае ваша оболочка интерпретирует это.

emailsender.py -u username -p pass\!\!

или

emailsender.py -u username -p 'pass!!'
2 голосов
/ 27 июля 2010

Как уже упоминалось, эта проблема не является специфической для Python, а вызвана тем, как вы передаете в пароль параметр пароля.

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

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

Например:

emailsender.py -u 'username' -p 'pass!!'
0 голосов
/ 27 июля 2010

Вы пробовали

$ emailsender.py -u username -p "pass!!"

РЕДАКТИРОВАТЬ- Это не будет работать. Читайте комментарии ниже

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