O “shell-command-on-region” do Emacs não passa STDIN para o comando se a linha de comando contiver meta-caracteres

1

Estou executando o Emacs no Windows XP SP3    GNU Emacs 22.3.1 (i386-mingw-nt5.1.2600) de 2008-09-07 em SOFT-MJASON

Quando executo um comando em que o argumento contém meta-caracteres do shell, minha região do Emacs não é passada para o comando via STDIN como esperado. Eu escrevi um programa para verificar se este é o caso:

## 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";
}

Por exemplo, se a região contiver:

a
b

E eu corro: perl c:\bin\test.pl "<" , eu recebo:

Input lines: 0
0: [[<]]

Se, em vez disso, eu executar: perl c:\bin\test.pl "-" , obtenho:

Input lines: 2
0: [[-]]

Minha variável de ambiente SHELL no Emacs está definida como c: /emacs/bin/cmdproxy.exe

Isso nunca foi um problema até que comecei a rodar uma versão recente do Emacs. Alguém sabe como consertar isso? (Eu não estou interessado em usar qualquer shell cygwin como meu shell emacs)
Edit:
Qualquer argumento para test.pl eu uso que contém um meta-caractere shell tem o mesmo efeito que usando "<". Por exemplo, passando "foo &" também resulta em "Linhas de entrada: 0"

Da mesma forma, qualquer argumento para test.pl eu uso que não contém um meta-caractere shell tem o mesmo efeito que usar "-". Por exemplo, passar "foo" também resulta em "Input Lines: 2"

    
por Adrian Pronk 30.08.2010 / 05:43

1 resposta

0

Usar < indica ao subprocesso que você deseja redirecionar de um arquivo , que o Emacs não está fornecendo. É por isso que você recebe 0 linhas de entrada.

Usar - indica que o subprocesso deve esperar entrada em stdin , que o Emacs está fornecendo, e o shell está calculando corretamente 2 linhas.

    
por 30.08.2010 / 17:11