在常规的cmd.exe或cygwin terminal上输入这个命令会得到预期的结果:
$ ack hello
(我有ack.bat在我的PATH中执行ack.pl)
但是,当我在Emacs的shell或shell中运行相同的命令时,它会给我这个错误:
c:UsersMartin>"C:cygwinbinperl" /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 both变量en_US来修复它。UTF-8,但是当我再次运行它时,它没有给我任何结果,而是冻结。
更新:我终于找到了解决这个问题的方法。我所需要的只是将< NUL
添加到命令的末尾,因为它将Linux风格的NULL DEVICE解析为默认值。
现在如果我输入:
ack hello < NUL
这个问题与ack本身无关,而是与编写ack的语言pearl有关。perl报告的是运行emacs的环境没有设置语言环境设置。将以下行添加到运行emacs的环境中:
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
注意:运行ack hello < NUL
只掩盖问题,它不能解决它。