0

私のスクリプトはすべてのデータを別の非カスタム スクリプトにさまざまな増分で送信しているため、ユーザーが私の perl スクリプトを実行するときに、ほぼ何でも入力できるようにする必要があります。

理論的には、私はこれが起こることを望んでいます:

perlscript "this is" -t stuff\n4^./q%

次に、perlscript で次のようにします。

print "Full: $full_command";

その結果:

Full: "this is" -t stuff\n4^./q%

それは意味がありますか?私が試したことはありませんが、argvなどで探していることを正確に実行します。

助けてくれてありがとう、ティム

4

3 に答える 3

4

シェルは以下と同等のことを行います

exec('perlscript', 'this is', '-t', 'stuff'.chr(0x0A).'4&^./q%');

そこperlから元のシェルコマンドを生成する方法はありません。Perl に受信させたい場合

"this is" -t stuff\n4^./q%

次のようなものを使用することをシェルに伝える必要があります

perlscript '"this is" -t stuff\n4^./q%'

(少なくとも、Borne シェルまたはその派生物については。)

于 2012-12-11T18:18:59.833 に答える
2

残念ながら、Perl スクリプトに到達する前に、シェルが引数を操作する可能性があります。特定の例では、bash のようなシェルは引用符を削除し、\nを として扱い、 に到達したらn行の処理を停止し&ます。Unixy システムでは、すべての引数を一重引用符で囲むのが最善の策かもしれません。

perlscript '"this is" -t stuff\n4&^./q%'
于 2012-12-11T17:57:17.317 に答える
-1

上記のように、OS を正しく引用すると仮定すると、おそらく次のようになります。

print join(" ", map { / / ? "\"$_\"" : $_ } @ARGV);

perl を実行するときは、"--" トークンを使用して、perl 自体に送信される引数とプログラムに送信される引数を分ける必要があることに注意してください。例えば:

perl -- -t 'stuff...'

これにより、引数が perl 自体によって誤って消費されるのを防ぐことができます。

于 2012-12-11T18:10:36.817 に答える