-3

我在 cgi 文件中有一个简单的 perl 脚本来查找和替换 dos 中的文本,例如:

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

这通常是由于您的 shell 和 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为您需要查找路径的命令。

我对 Powershell 不像对 Cygwin 那样熟悉,而且我不知道您是否使用的是 Cygwin perl。奇怪的是你必须使用 unix 风格的路径来获取你的命令。如果您使用的是 cygwin,您可以使用看起来像/cygdrive/c/window32/powershellcommand.exe. 如果没有,您将不得不查找您的 perl 版本的文档以获得确切的语法(否则其他人将不得不纠正我)。

希望有帮助!

于 2012-08-03T05:28:46.143 回答