history
zshを使用してEmacsで実行するとコマンドが使用できないことがわかりましたshell-command
。
history | grep runserver
明らかになるzsh:fc:1: no such event: 1
。
私もhistdb
次のコマンドを使用します。https://github.com/larkery/zsh-histdbこのコマンドはzshで使用できますが、Emacsでは呼び出すことはできません。
histdb --limit 2000 | grep runserver
出力zsh:1: command not found: histdb
明らかに私はシェルの重要な側面を理解していません。
これらの問題を解決するには何が必要ですか?
この現象はEmacsにのみ存在するものではありません。たとえば、リモートsshコマンドを実行すると、同じエラーメッセージが表示されます。ssh [email protected] 'histdb --limit 2000'
答え1
私のzshにはコマンドがないので、組み込みhistdb
コマンドではなく実際に関数であると仮定する必要があります。
シェル機能はソーススクリプト(通常はプライベート初期化スクリプトまたはシステムレベルの初期化スクリプト)からロードされます。これらのスクリプトが複数あり、すべての場合で実行されるわけではないため、誤ったスクリプトに関数を定義すると、場合によってはその関数を使用できないことがあります。
また、initスクリプトはシェルが実行されている環境を検出し、条件に応じてコンポーネントをロードできます。おそらく、何らかの理由でemacsでzshを実行すると、emacsの外部で実行したときに得られるすべての機能がロードされない可能性があります。
確実にするには、関数がどのファイルからロードされたのか、そしてそのファイルの定義の前に条件付きコードがあるかどうかを知る必要があります。