在常规 cmd.exe 或 cygwin termal 上键入此命令会得到预期的结果:
$ ack hello
(我有 ack.bat 在我的 PATH 中执行 ack.pl)
但是,当我从 Emacs 中的 shell 或 eshell 运行相同的命令时,它给了我这个错误:
c:\Users\Martin>"C:\cygwin\bin\perl" /cygdrive/c/Users/Martin/Desktop/ack.pl hello
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LANG = "ENU"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
我试图通过 SETENV 将这两个变量都修复为 en_US.UTF-8 但是当我再次运行它时,它没有给我任何结果,而是冻结了。
更新:我终于找到了解决这个问题的方法。我需要的只是添加< NUL
到命令的末尾,因为它将 Linux 风格的 NULL DEVICE 解析为默认值。
现在,如果我输入:
ack hello < NUL
它会给我预期的结果。