Я выполняю Emacs на Windows-XP SP3 GNU Emacs 22.3.1 (i386-mingw-nt5.1.2600) от 07.09.2008 на МЯГКОМ-MJASON
Когда я выполняю команду, где аргумент содержит метасимволы оболочки, мой регион Emacs не передается команде через STDIN как ожидалось. Я записал программу, чтобы проверить что дело обстоит так:
## test.pl
my $lines = 0;
while (<STDIN>)
{
++$lines;
}
print "Input lines: $lines\n";
for (my $i = 0; $i < @ARGV; ++$i)
{
print "$i: [[$ARGV[$i]]]\n";
}
Например, если регион содержит:
a
b
И я работаю: perl c:\bin\test.pl "<"
, Я добираюсь:
Input lines: 0
0: [[<]]
Если вместо этого я работаю: perl c:\bin\test.pl "-"
, Я добираюсь:
Input lines: 2
0: [[-]]
Моя переменная Среды оболочки в Emacs установлена на c:/emacs/bin/cmdproxy.exe
Это никогда не было проблемой, пока я не начал выполнять последнюю версию Emacs. Кто-либо знает, как зафиксировать это? (Я не интересуюсь использованием никакой оболочки cygwin как моя оболочка emacs),
Править:
Любой аргумент test.pl, который я использую, который содержит метасимвол оболочки, имеет тот же эффект как использующий" <". Например, передача "foo&" также приводит к "Входным Строкам: 0 дюймов
Точно так же любой аргумент test.pl, который я использую, который не содержит метасимвол оболочки, имеет тот же эффект как использующий "-". Например, передающее "нечто" также приводит к "Входным Строкам: 2 дюйма
Используя <
указывает к подпроцессу, что Вы хотите перенаправить из именованного файла, который не предоставляет Emacs. Поэтому Вы получаете 0 входных строк.
Используя -
указывает для подобрабатывания, должен ожидать вход на stdin
, который предоставляет Emacs, и оболочка правильно вычисляет 2 строки.