別のBashスクリプトを呼び出すBashスクリプトがあります。呼び出されたスクリプトは、いくつかの変更とチェックを行い、シフトしてから、呼び出し元のコマンドラインの残りの部分を通過させます。
呼び出されたスクリプトで、すべてが管理され、呼び出す準備ができていることを確認しました。これが私が入れたデバッグスタイルのコードです:
echo $SVN $command $@ > /tmp/shimcmd
bash /tmp/shimcmd
$SVN $command $@
これで、/ tmp/shimcmdに次のように表示されます。
svn commit --username=myuser --password=mypass --non-interactive --trust-server-cert -m "Auto Update autocommit Wed Apr 11 17:33:37 CDT 2012"
つまり、ビルドされたコマンドはすべて1行で、-m「スペース付きの文字列」部分を含めて完全に問題ありません。
それは完璧だ。また、「bash / tmp/shimcmd」の実行も完全に機能します。
しかしもちろん、このばかげたtmpファイルなどは必要ありません(デバッグにのみ使用されます)。問題は、shimファイルを介してではなく、コマンドを直接呼び出すことです。
$SVN $command $@
その結果、svnコマンド自体はスペース付きの引用符で囲まれた文字列を受け取りません。「-m」「スペース付きの文字列」パラメータが文字化けし、「-mスペース付きの文字列」として渡されたかのようにコマンドをシャンクします。
私はあらゆる種類のクレイジーな脱出方法を無駄に試しました。これがひどく私を悩ませているなんて信じられない。繰り返しますが、まったく同じもの($ SVN $ command $ @)をファイルにエコーし、そのファイルを実行することで、FINEになります。ただし、直接呼び出すと、引用符で囲まれた文字列が文字化けします。その要素だけがシャンクします。
何か案は?
ダン