Emacs “shell-command-on-region” не передает STDIN, чтобы управлять, содержит ли командная строка метасимволы

Я выполняю 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 дюйма

1
задан 31.08.2010, 00:11

1 ответ

Используя < указывает к подпроцессу, что Вы хотите перенаправить из именованного файла, который не предоставляет Emacs. Поэтому Вы получаете 0 входных строк.

Используя - указывает для подобрабатывания, должен ожидать вход на stdin, который предоставляет Emacs, и оболочка правильно вычисляет 2 строки.

0
ответ дан 24.11.2019, 01:38

Теги

Похожие вопросы