1

Я использую Emacs для Windows-XP с пакетом обновления 3 (SP3) GNU Emacs 22.3.1 (i386-mingw-nt5.1.2600) от 2008-09-07 на SOFT-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: [[-]]

Моя переменная окружения SHELL в Emacs имеет значение c:/emacs/bin/cmdproxy.exe

Это никогда не было проблемой, пока я не запустил последнюю версию Emacs. Кто-нибудь знает, как это исправить? (Я не заинтересован в использовании какой-либо оболочки Cygwin в качестве моей оболочки Emacs)
Редактировать:
Любой аргумент для test.pl, который я использую, который содержит метасимвол оболочки, имеет тот же эффект, что и использование «<». Например, передача «foo &» также приводит к «Input Lines: 0»

Точно так же любой аргумент test.pl, который я использую, но не содержит метасимвол оболочки, имеет тот же эффект, что и "-". Например, передача "foo" также приводит к «Input Lines: 2»

1 ответ1

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .