urxvt -eはsource.zshrcではありません

urxvt -eはsource.zshrcではありません

ranger新しいターミナルウィンドウを開き、その中でプログラムを開く一般的な操作のキーバインディングを作成したいと思います。

明らかなコマンドは次のとおりです。

urxvt -e ranger

重要なことは、箱から取り出すとすぐに動作します。しかし、ranger別のプログラムを使用しようとしていますが、fzfそのプログラムが見つかりません。エラーメッセージzsh:1: command not found: fzf

結果は次のとおりです。

urxvt -e zsh -c ranger

すでに端末を開いて呼び出すとranger問題fzfなく動作します。

見てみると、バイナリへのパスが私のパスにfzf追加されました。したがって、私の仮定は、これが私をソースにすることは決してなく、パスに追加されないということです。$PATH.zshrc.zshrc


この問題に対する明確な解決策があります(fzf内部パスを呼び出すにはフルパスを使用)。しかし、この問題は私を何度も嫌がらせし、良い解決策を望んでいます。ranger~/.fzf/bin/fzf

.zshrcプログラムをダウンロードして開くにはどうすれば新しい端末を開くことができますかranger


私が理解していないもう一つの観察は次のとおりです。

スクリプトを作成しましたmyranger.sh

#!/usr/bin/zsh
source ~/.zshrc
ranger

そして、次のコマンドを使用して新しい端末を作成します。

urxvt -e myranger.sh

Rangerのある端末が開きますが、fzfまだ$PATH。私がここで何を見逃しているのでしょうか?


ちなみに、これは具体的ではなく、zsh具体的urxvtではありません。私もbashこれをand / orでテストしましたgnome-terminal

ベストアンサー1

urxvt -e zsh -c rangerほぼ同じですurxvt -e ranger。 urxvtにzshを実行するように指示し、zshがrangerを実行するとそれはすべてです。urxvt -e zsh -c rangerロードしないでください.zshrc:zshは起動時にのみロードされます。インタラクティブシェル、つまりスクリプトを実行するためにシェルが起動されたとき(スクリプトがファイルにあるかコマンドラインを介して渡されたか-c)ではなく、ユーザーコマンドを読み取るシェルです。

.zshrc明示的にロードできます(urxvt -e zsh -c '. ~/.zshrc; ranger'または以前と同じようにラッパースクリプトを使用できます)。しかし、.zshrcこれはzshの対話型設定(キーバインディング、エイリアスなど)のためのものであるため、良い考えではありません。環境変数の設定(PATHなど)はすべてのプログラムに適用されるため、ログイン時に設定する必要があります。一般的に~/.profile。 PATH設定を適切な場所に移動.zshrcします.profile

おすすめ記事