通常の cmd.exe または cygwin ターミナルでこのコマンドを入力すると、期待どおりの結果が得られます。
$ ack hello
(PATHでack.plを実行するack.batがあります)
ただし、Emacs のシェルまたは 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
期待通りの結果が得られます。