私は、bashでコマンドを実行するアプリケーションを使って作業しています。これは、「テンプレート」それが使用されている。ドル記号をエスケープするsh -c
sh -c '<command> "<argument>"'
私は引用符を編集することはできませんのでご注意ください、私が編集できる唯一のことは、コマンドと引数です。私はドル記号も逃げることができません。私は、正確な出力を得ることができますどのように
x=test
、次のとおりです。
sh -c 'echo "x=test$test"'
は、次のような出力が得られます。引数にドル記号がない限り
この「テンプレート」は正常に動作します:
x=test$test
私は引用符を切り替えることができれば、私はこれを行うことができます
:
sh -c "echo '"'x=test$test'"'"
x=test$test
これを達成する方法はありますか?
これは*極めて*悪いデザイン:ARGVは(
subprocess.Popen(cmd, shell=False)
に適したPythonの構文に下記の)次のように見ているわけでしょうそれを行います。正しい使用法は、 'execlp(" sh "、" sh "、" -c "、スクリプト、" _ "、arg1、arg2、...、NULL)のような方法でアウトオブプロセスシェルを呼び出すことです。コマンドは、これらのアウトオブバンド引数を参照するために '' $ 1 ''、' '$ 2''などを参照します。私は、大きなプログラム、ライブラリ、またはフレームワークがあなたにこれらの制約を与えているものに対して、セキュリティバグのチケットを提出することをお勧めします。 –ところで、なぜあなたはコマンドと引数の両方を編集できますが、ドル記号をエスケープできないと言いますか?ドル記号をエスケープすることは、引数を編集することの一部に過ぎません。 –
ところで、あなたはこのタグ付きのbashを持っていますが、あなたは 'sh'を呼び出しています。 'bash'は' sh'を呼び出すために使われていますか?これは本当に間違った 'sh'質問ですか? POSIX shは、bashとは非常に異なるシェル言語です。 –