[Namazu-devel-ja 104] Re: Windows で動かす際に問題になりそうな箇所

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2004年 9月 3日 (金) 00:31:13 JST


寺西です。

my ($status, $fh_out, $fh_err) = util::systemcmd(@cmd);

のテストに notepad.exe, namazu.exe, mknmz.bat を使って動作を確認
してみました。

A. @cmd = ("notepad.exe", "a*.txt");
  ワイルドカードを含む引数。  

  -> OK. a*.txt ファイルを開こうとするので、ワイルドカードの展開は
  行われていない。

B. @cmd = ("notepad.exe", "\"a*.txt\"");
 ワイルドカードを含む引数をダブルクォーテーションで囲む。

  -> BAD. .txt ファイルを開こうとするので、ダブルクォーテーション
  が余計。

C. @cmd = ("notepad.exe", "a b.txt");
  空白を含む引数。

  -> OK. a b.txt ファイルを開こうとするので、空白で引数が分かれる
  ことはない。

D. @cmd = ("notepad.exe", "&&", "notepad.exe");
 コマンドセパレータ && を含めて複数のコマンドを実行。

  -> OK. && notepad.exe ファイルを開こうとするので、複数のコマンド
  を実行することはない。

E. @cmd = ("namazu");
 .exe を省略。

  -> BAD. コマンドが存在しないものとして処理される。.exe をつける
  必要がある。

F. @cmd = ("namazu.exe", "f*");
   f* を検索文字列に指定。

  -> BAD. ワイルドカードが展開されてしまう。(getopt がやってる?)

G. @cmd = ("namazu.exe", "\"f*\"");
   f* をダブルクォーテーションで囲んで指定。

  -> OK. 検索文字列は f* とみなされる。

H. @cmd = ("mknmz");
   .bat を省略。

  -> BAD. コマンドが存在しないものとして処理される。.bat をつける
  必要がある。

I. @cmd = ("mknmz.bat", "-C");
   バッチファイルに引数を指定。

  NT 系 -> OK.
  9x 系 -> BAD. 引数が渡らない。

J. @cmd = ("command.com", "/c", "mknmz.bat", "-C");
   command.com /c を補う。(9x 系のみ)

  9x 系 -> OK.

K. @cmd = ("cmd.exe", "/c", "mknmz.bat", "-C");
   cmd.exe /c を付加する。(NT 系のみ)

  NT 系 -> OK.

A,B,F,G の結果から、ワイルドカードの処理は実行するプログラム側で
行われる以上、統一的な方法で引数を指定することができないことが
確認できました。
やはり、実行するプログラムと実行する環境(Windows 環境)により、
個別に引数を変える必要があります。
# ぐは。これは困った。当たり前といえば、当たり前なんだが。

I,J も困ったものです。.bat の場合は、環境変数 COMSPEC を第一
引数にして、第二引数に /c を指定するように util::systemcmd() を
細工するしかないですかね。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内