2

我有abc.py接受参数-p [password]&的文件-c [command]。现在我可以按如下方式运行此文件:

./abc.py -p 'a!s!d!f' -c 'ifconfig'

a!s!d!f是我的密码。由于密码包含!字符,所以我必须将其作为参数发送到' '. 我试图发送它" "但没有工作。

现在我想按如下方式运行此代码:

./abc.py -p 'a!s!d!f' -c './abc.py -p 'a!s!d!f' -c 'ifconfig''

./abc.py -p 'a!s!d!f' -c 'ifconfig'作为一个论据abc.py

问题是,我无法将'characher 作为参数发送给abc.py

我需要这个'字符作为输入发送。

我尝试使用\转义字符:

./abc.py -p 'a!s!d!f' -c './abc.py -p \'a!s!d!f\' -c \'ifconfig\''

但不工作。我该怎么做呢?任何帮助将不胜感激。

4

2 回答 2

2

您需要同时引用'!

./abc.py -p 'a!s!d!f' -c "./abc.py -p 'a!s!d!f' -c 'ifconfig'"

$ cat p.py
import sys
print sys.argv

在 Korn 壳中:

$ python p.py -p 'a!s!d!f' -c "./abc.py -p 'a!s!d!f' -c 'ifconfig'"
['p.py', '-p', 'a!s!d!f', '-c', "./abc.py -p 'a!s!d!f' -c 'ifconfig'"]

在 bash!中,只有用单引号括起来才不会被特殊对待,因此可以这样做:

$ python p.py -p 'a!s!d!f' -c './abc.py -p '"'"'a!s!d!f'"'"' -c config'
['p.py', '-p', 'a!s!d!f', '-c', "./abc.py -p 'a!s!d!f' -c config"]

请注意,当您用双引号引用整个字符串时,结果会有所不同:

$ python p.py -c "./abcy.py -p 'a\!s\!d\!f' -c 'ifconfig'"
['p.py', '-c', "./abcy.py -p 'a\\!s\\!d\\!f' -c 'ifconfig'"]
于 2013-05-09T11:05:14.050 回答
1

在 Bash(遵循POSIX shell 标准)中,单引号按字面意思保留每个字符,这意味着无法转义单引号内的内容。您的选择是:

  1. 通过将它们彼此相邻放置来连接不同引用的字符串:

    ./abc.py -c "./abc.py -p '"'a!s!d!f'"' -c 'ifconfig'"
    
  2. 使用双引号并转义!字符:

    ./abc.py -c "./abcy.py -p 'a\!s\!d\!f' -c 'ifconfig'"
    
于 2013-05-09T11:26:37.680 回答