我在windows perl中运行以下命令:
qx(strings -a -f /cygdrive/C/TestBox/Out/UT_*.o | grep "Test_String");
我收到错误:'grep'未被识别为内部或外部命令, 可操作程序或批处理文件。如何解决这个问题?
答案 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执行所有system
和qx
命令,但看起来您希望在Cygwin shell下运行某些命令。一些选择:
在Cygwin上安装并使用perl
。在Cygwin perl中,system
和qx
命令的shell是Cygwin(bash)shell。 Perl易于从安装程序安装或从源代码构建。
指示Windows shell在Cygwin shell中运行该命令。该命令可能看起来像这样(未经测试):
C:\cygwin\bin\bash.exe -c "strings -a -f /cygdrive/C/TestBox/Out/UT_*.o | grep 'Test_String'"