0

RSH を使用して別のマシンでコマンドを実行する CVS ラッパー スクリプトを書きたいのですが、引用符に問題があります。

#!/bin/csh -f
rsh <machine> cvs $*:q

問題は、引数が引用符で渡されても、コマンドの実行時に RSH がそれらをドロップするように見えることです。次のコマンドは、宛先では 3 つの引数として表示されるはずですが、代わりに 4 つになっています。

cvsWrap diff -D "2011-05-01 00:00:00"

私は実際に SGE の rsh 互換バージョンである qrsh を使用しているので、rsh を使用しない方法についてのアドバイスを探しているわけではありません。インタープリターの使用を検討しましたが、文字列内の引用符をエスケープする方法がわかりません:

rsh <machine> /bin/csh -c "cvs $*:q"

私は c-shell に最も精通していますが、もし誰かがそれを書くなら bash スクリプトを検討したいと思います。この CVS スクリプトはどのように書けばよいですか?

4

2 に答える 2

0

呼び出し:

cvsWrap diff -D \"2011-05-01 00:00:00\"

おそらく役立つでしょうが、理想的ではありません。

根底にある問題は、csh が最初の策略として引用符を破棄して、それらを argv に入れるためにグループ化するため、引用符が実際には cvsWrap に含まれないことです。代わりにあなたが持っている

argv[1] == diff
argv[2] == -D
argv[3] == 2011-05-01 00:00:00

彼らが行うのは、スペースを含む文字列を同じ引数に取得することだけです。

于 2011-05-25T16:20:07.967 に答える