Вы используете Perl, созданный для Windows (ActiveState? Strawberry?), А не версию Cygwin. Он вызывает cmd.exe
для system()
, который считает, что ..
является командой, а /
вводит опцию.
Попробуйте изменить system()
вызов на:
system("..\\cat.exe < a.txt > b.txt");
Но вы должны обычно использовать версию Perl Cygwin при запуске скрипта из bash
.
Что выводят следующие команды?
echo "$PATH"
type -a perl
/usr/bin/perl -v
Из того, что мы видели до сих пор, похоже, что вы установили какой-то специфичный для Windows Perl с perl.exe
в каталог Cygwin /usr/bin
. Если это так, то (а) удалите его (вы можете переустановить его в другом месте, если хотите) и (б) переустановите пакет «perl» через Cygwin's setup.exe
.
(И добавить use warnings;
после use strict;
в ваших скриптах Perl. Это не связано с вашей проблемой, но это хорошая практика.)