urxvt -e 不來源 .zshrc
我想為常見任務創建一個鍵綁定:打開一個新的終端視窗並
ranger
在其中打開程序。顯而易見的命令是這樣的:
urxvt -e ranger
重要的事情開箱即用。但是在
ranger
我想使用另一個名為 的fzf
程序時,找不到該程序。錯誤資訊zsh:1: command not found: fzf
。結果相同
urxvt -e zsh -c ranger
當我已經有一個打開的終端並呼叫
ranger
它時,fzf
可以毫無問題地呼叫它。我看了看,二進製文件的路徑
fzf
被添加到$PATH
我的.zshrc
. 所以我的假設是這永遠不會來源 my.zshrc
,它永遠不會被添加到路徑中。有一個明顯的解決方法(使用完整路徑
fzf
在內部呼叫),但是這個問題已經讓我煩惱了好幾次,我想要一個很好的解決方案。ranger``~/.fzf/bin/fzf
如何打開一個新的終端,該終端可以獲取
.zshrc
並打開程序ranger
?還有一個我不明白的觀察:
我創建了一個腳本
myranger.sh
:#!/usr/bin/zsh source ~/.zshrc ranger
並使用以下命令創建了新終端:
urxvt -e myranger.sh
帶護林員的終端打開,但
fzf
仍未在$PATH
. 我在這裡錯過了什麼?順便說一句,這不是
zsh
或urxvt
具體的。我還用bash
and/or對此進行了測試gnome-terminal
。
urxvt -e zsh -c ranger
幾乎等同於urxvt -e ranger
. 您是在告訴 urxvt 執行 zsh,並告訴 zsh 執行 ranger,僅此而已。urxvt -e zsh -c ranger
不載入.zshrc
:zsh 僅在啟動互動式shell 時載入它,即讀取使用者命令的 shell,而不是在啟動執行腳本的 shell 時載入(無論此腳本在文件中,還是在命令行中傳遞-c
)。您可以顯式載入
.zshrc
(urxvt -e zsh -c '. ~/.zshrc; ranger'
,或像您一樣使用包裝腳本)。但這不是一個好主意,因為.zshrc
它用於 zsh 的互動式設置——鍵綁定、別名等。環境變數設置(例如 PATH)適用於所有程序,因此它們應該在登錄時完成,通常在~/.profile
. 將您的 PATH 設置從它所屬的位置.zshrc
移動。.profile