我在 Windows-XP SP3 上运行 Emacs,GNU Emacs 22.3.1 (i386-mingw-nt5.1.2600),2008-09-07,SOFT-MJASON 上
当我运行参数包含 shell 元字符的命令时,我的 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 中的 SHELL 环境变量设置为 c:/emacs/bin/cmdproxy.exe
在我开始运行最新版本的 Emacs 之前,这从来都不是问题。有人知道如何解决这个问题吗?(我不想使用任何 cygwin shell 作为我的 emacs shell)
编辑:
我使用的包含 shell 元字符的任何 test.pl 参数都与使用“<”具有相同的效果。例如,传递“foo&”也会导致“输入行:0”
类似地,我使用 test.pl 的任何参数才不是包含 shell 元字符与使用“-”具有相同的效果。例如,传递“foo”也会导致“输入行:2”
答案1
使用<
指示要从命名的子进程重定向文件,而 Emacs 并未提供此功能。这就是您获得 0 个输入行的原因。
使用-
指示子进程应该在 上接收输入stdin
,Emacs是供应,并且外壳正在正确计算2行。