【问题标题】:How to pass argument with exclamation mark on Linux?如何在 Linux 上传递带感叹号的参数?
【发布时间】:2010-07-27 18:07:58
【问题描述】:

我有一个简单的 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"

我可以使用反斜杠 (\) 转义感叹号,但我的密码会更改。

有没有解决办法,如何在不更改密码的情况下转义感叹号?

【问题讨论】:

  • 第二个命令没有多大意义,你想在那里做什么?特别是passemailsender.py -u username -p passwget wget ... 部分
  • !!被shell替换,它被最后执行的命令替换。这不是特定于 python 的。
  • @Infinity - Bash 解释“!!”作为您输入的最后一个命令。因此,当他在没有使用单引号或反斜杠转义密码的情况下输入命令时,bash 会在“!!”的位置插入他的最后一个命令。是。

标签: linux shell arguments


【解决方案1】:

正如其他人所提到的,此问题并非特定于 Python,而是由您将密码参数传递给脚本的方式引起的。

您需要将密码字符串用单引号括起来,以确保它完全按照您键入的方式传递给脚本,并且不会被 shell 解释。

如果用户名可能包含感叹号或其他特殊字符,您也可以这样做。

例如:

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

【讨论】:

    【解决方案2】:

    您应该能够在 shell 中简单地将内容用单引号括起来。

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

    【讨论】:

      【解决方案3】:

      您需要使用\ 对其进行转义或使用单引号将其引用,否则您的shell 会对其进行解释。

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

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

      【讨论】:

      • 仅作记录,如果您没有双引号引用参数,则转义可以正常工作。否则,“\”将按字面意思写入文件。
      猜你喜欢
      • 2011-03-21
      • 2013-09-21
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      相关资源
      最近更新 更多