-3

次のようなdosのテキストを見つけて置き換えるための単純なperlスクリプトがcgiファイルに含まれています。

system("type data.txt | powershell -Command "$input | ForEach-Object { $_ -replace \"ID\", \"$id\" }" > new.txt");

また

system("cat tmp/$id/index.html 's/ID/$id/g' a");

(私はPowershellとCygwinを持っています)

このスクリプトを実行しても、何も起こりません! しかし、このコマンドをcmd(Windows)で直接入力すると、完了です!そして私の質問は、私の CGI ファイルでこれらのコマンドを実行する方法ですか?

4

2 に答える 2

1
open(my $fh, "<", "data.txt") or die "Error opening data.txt: $!";
open(my $out, ">", "new.txt") or die "Error opening new.txt: $!";
my $id = 'NewId';
while (<$fh>) {
    s/ID/$id/g;
    print $out $_;
}
close $fh;
close $out;
于 2012-08-03T17:28:52.887 に答える
0

通常、これは、シェルと perl 環境で環境が同じに設定されていないために発生します。通常、コマンドに明示的なパス名を使用することで修正されます。

だからというより

system("cat tmp/$id/index.html 's/ID/$id/g' a");

試す

system("/bin/cat tmp/$id/index.html 's/ID/$id/g' a");

これは私のマシンで動作します。cygwin から、パスを見つける必要があるコマンドwhich commandに置き換えて入力することで、特定のコマンドのパスを把握できるはずです。command

私は Cygwin ほど Powershell に精通していません。また、Cygwin perl を使用しているかどうかもわかりません。コマンドを取得するには、UNIX スタイルのパスを使用する必要がある可能性があります。cygwin を使用している場合は、次のようなものを使用できます/cygdrive/c/window32/powershellcommand.exe。そうでない場合は、perl のバージョンのドキュメントを探して正確な構文を取得する必要があります (または、他の誰かが私を修正する必要があります)。

それが役立つことを願っています!

于 2012-08-03T05:28:46.143 に答える