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 シェル標準に準拠) では、一重引用符はすべての文字をそのまま保持します。つまり、一重引用符内の内容をエスケープする方法はありません。選択肢は次のとおりです。

  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 に答える