WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlからシステムコマンド実行する際の文字変換について

0:[投稿] cheri [MAIL] [2005/09/10 15:45 ][環境:サーバ側での処理なので、ありません。 Unix(SOL9)、Apache、perl5.8]

初めて投稿させていただきます。
よろしくお願いします。

perl5.8のプログラムから、システムコマンドを実行する際、UTFコードがパスに混じっていると「ファイルが見つかりません」というエラーが表示され、プログラムが中断してしまいました。

調べたところ、「.(ピリオド)」や「3」が入ったパス名の場合、perlからシステムコマンドを実行すると、「.(ピリオド)」と「3」の前にバックスラッシュをつけて実行してしまっていて、「ファイルが見つかりません」というエラーになるようです。

コードは下記です。
$lsPathや、$outPathにUTFの「.(ピリオド)」と「3」(他の文字は未確認)を含んだ文字列が入ると、実行に失敗します。
($errに「ファイルが見つかりません」という文字列が入ります。)


$err=`(ls -l \'$lsPath\' 1> \'$outPath\') 2>&1`;


ちなみに、\'(バックスラッシュシングルクォート)を削除すると、エラーは起こりません。(下記コード)


$err=`(ls -l $lsPath 1> $outPath) 2>&1`;


しかし、これではスペースを含んだパスに対応できません。

シングルクオートと等でくくった形+UTFが変換されないよう実行される方法をご存知の方いらっしゃいましたらよろしくお願いします。

※マルチポストさせていただいています。
http://www.gac.jp/article/index.php?stats=question&category=12&id=15773&command=msg


1:[回答] gun [2005/09/12 13:12 ]

\は要らないと思います。

$err=`(ls -l '$lsPath' 1> '$outPath') 2>&1`;


2:[回答] cheri [MAIL] [2005/09/15 13:17 ]

他のサーバでは起こらない不具合で、理解はできないのですが・・・、
バックスラッシュ演算子で実行したいコマンドを、ファイルに書き出し、bshで実行すると駄目。
cshやbashで実行すれば○

ということがわかったので、遠回りですが、そのように処理することで回避させました。  

gunさん>
返答していただきありがとうございます。
確認していませんでした。
すみません。
上記方法も試しましたが、うまくはいきませんでした。

不可解です。
bshは、容量やdiffした結果も動いているサーバとなんら変わらない。
なのになぜ。。。

何はともあれ回避できました。

※マルチポストさせていただいていました。
http://pc8.2ch.net/php/index.html
http://www.gac.jp/article/index.php?stats=question&category=12&id=15773&comm
and=msg

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World