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
。
答え2
マニュアルzsh
引用:
呼ぶ
-iはシェルの相互作用を強制します。
それから
シェルがログインシェルの場合は、コマンドを読んでから
/etc/zprofile
コマンドを読みます$ZDOTDIR/.zprofile
。次に、シェルがインタラクティブである場合、および/etc/zshrc
からコマンドを読みます$ZDOTDIR/.zshrc
。最後に、シェルがログインシェルの場合はを/etc/zlogin
読んでください$ZDOTDIR/.zlogin
。...
ZDOTDIR
設定しないと使用されHOME
ます。
したがって、.zshrc
実行の初期に強制購入を行うために
urxvt -e zsh -ci ranger