種別[software] cocolog:10215170
セクションJRF のソフトウェア Tips
日時2006年02月26日 05:47:03
元URLhttp://jrf.cocolog-nifty.com/software/2006/02/post_19.html
タグ[Perl] [Windows アプリ]

Windows のコマンドライン cmd.exe 用のエスケープってどうやるの?

ActivePerl からパイプを使って GnuPG を起動しようとしたが、 perlipc に載ってる方法ではダメみたい。pipe の fileno で取ったファイルディスクリプタもうまく渡せないみたいだし。

それで次のようなことをしようとしたんだけど、pipe のコマンドの引数をリストでは渡せないっていわれる。

open(GPG, '-|', $GPG, '--list-keys') or die;

しょうがないので、コマンドラインを連結しましょうということになったのだが、Windows の cmd.exe の構文がわからない。

ググってみると《CMD.EXE TIPs》という Wiki に構文が書いてあった。そこの文章を参考にいろいろ試してみたけど、次みたいのでいいのかな?

sub quote_for_command {
    my $r = "";
    while (@_) {
      my $arg = shift;
      $arg =~ s/\%/^\%/gs;
      $arg =~ s/"/"""/gs;
      $r .= " " if $r ne "";
      $r .= "\"$arg\"";
    }
    return $r;
}

でもこういうのは需要あるはずだから探せば見つかりそうなものなのに、 Perl でやってるのを、ちょっと見つけられなかった。

更新:06/02/26
初公開:2006年02月26日 05:47:05
最新版:2006年03月11日 03:58:07