2

通常の 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 に修正しようとしましたが、再度実行すると結果が得られず、フリーズしました。

更新: この問題の解決策をついに見つけました。< NULLinux スタイルの NULL DEVICE をデフォルトとして解析するため、必要なのはコマンドの最後に追加することだけでした

これを入力すると:

ack hello < NUL

期待通りの結果が得られます。

4

1 に答える 1

0

この問題は ack 自体とは関係ありませんが、Ack が書かれている言語である pearl とは関係ありません。perl が報告するのは、emacs を実行している環境にロケール設定が設定されていないということです。emacs を実行している環境に次の行を追加します。

export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

注: 実行ack hello < NULしても問題がマスクされるだけで、解決されません。

于 2019-06-27T00:55:12.290 に答える