我有以下简单的perl脚本,我无法在cygwin中执行:
#!/usr/bin/perl
use strict;
system("../cat.exe < a.txt > b.txt");
当我运行它时,脚本告诉我:
./my_test.pl
'..' is not recognized as an internal or external command,
operable program or batch file.
但是我可以在cygwin shell中运行命令:
$ ../cat.exe < a.txt > b.txt
$ ../cat.exe b.txt
hello
可执行cat.exe存在于上面的目录中,而a.txt存在于当前工作中 。目录
我的perl版本: $ perl -v
这是为MSWin32-x86-multi-thread构建的perl,v5.8.8 (有12个注册补丁,详见perl -V)
答案 0 :(得分:3)
你使用的是为Windows构建的perl(ActiveState?Strawberry?),而不是Cygwin版本。它为cmd.exe
调用system()
,它认为..
是命令而/
引入了一个选项。
尝试将system()
调用更改为:
system("..\\cat.exe < a.txt > b.txt");
但是当<{1}}运行脚本时, 通常应该使用Cylwin版本的perl。
以下命令的输出是什么?
bash
从目前为止看到的情况看来,您已经在Cygwin echo "$PATH"
type -a perl
/usr/bin/perl -v
目录中安装了一些特定于Windows的Perl及其perl.exe
。如果是这样,那么(a)卸载它(如果你愿意,可以在别处重新安装),以及(b)通过Cygwin的/usr/bin
重新安装“perl”包。
(并在setup.exe
之后在您的Perl脚本中添加use warnings;
。这与您的问题无关,但这是一种很好的做法。)
答案 1 :(得分:1)
错误消息显然来自cmd.exe
,这显然是您的默认shell。 echo $SHELL
说什么?也许您需要将该变量定义为/bin/bash.exe
。