我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
问题是,我无法将'
字符作为abc.py
的参数发送
我需要将此'
字符作为输入发送。
我尝试使用\
转义字符:
./abc.py -p 'a!s!d!f' -c './abc.py -p \'a!s!d!f\' -c \'ifconfig\''
但不行。我该怎么做呢?任何帮助将不胜感激。
答案 0 :(得分: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 shell中:
$ 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'"]
答案 1 :(得分:1)
在Bash中(在POSIX shell standard之后),单引号按字面意思保留每个字符,这意味着无法在单引号内转义内容。您的选择是:
通过将不同引用的字符串放在一起来连接它们:
./abc.py -c "./abc.py -p '"'a!s!d!f'"' -c 'ifconfig'"
使用双引号并转义!
个字符:
./abc.py -c "./abcy.py -p 'a\!s\!d\!f' -c 'ifconfig'"