无法在cygwin中执行系统命令

时间:2011-10-29 16:00:26

标签: perl path cygwin

我有以下简单的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)

2 个答案:

答案 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