如何在windows perl脚本中运行shell命令

时间:2015-08-10 12:23:40

标签: windows perl shell

我在windows perl中运行以下命令:

qx(strings -a -f /cygdrive/C/TestBox/Out/UT_*.o | grep "Test_String");

我收到错误:'grep'未被识别为内部或外部命令, 可操作程序或批处理文件。如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这段代码显然是由Unix或Linux编写的,他们认为有一天它可能会在没有grep命令的平台上使用(如Windows)。

这很奇怪,因为grep - 类似功能是Perl非常擅长的。所以很难理解为什么他们会依赖可能没有安装的外部程序。

我会像这样改写那行:

open my $string_fh, '-|', 'strings -a -f /cygdrive/C/TestBox/Out/UT_*.o' or die $!;
my @strings = grep { /Test_String/ } <$string_fh>;

我想在纯Perl中重写strings调用还有一个论点 - 但这不会那么简单。

答案 1 :(得分:1)

Windows perl(例如ActiveState或Strawberry Perl)将使用Windows shell执行所有systemqx命令,但看起来您希望在Cygwin shell下运行某些命令。一些选择:

  1. 在Cygwin上安装并使用perl。在Cygwin perl中,systemqx命令的shell是Cygwin(bash)shell。 Perl易于从安装程序安装或从源代码构建。

  2. 指示Windows shell在Cygwin shell中运行该命令。该命令可能看起来像这样(未经测试):

    C:\cygwin\bin\bash.exe -c "strings -a -f /cygdrive/C/TestBox/Out/UT_*.o | grep 'Test_String'"