Bash

urxvt -e 不來源 .zshrc

  • December 28, 2017

我想為常見任務創建一個鍵綁定:打開一個新的終端視窗並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. 我在這裡錯過了什麼?


順便說一句,這不是zshurxvt具體的。我還用bashand/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)。

您可以顯式載入.zshrcurxvt -e zsh -c '. ~/.zshrc; ranger',或像您一樣使用包裝腳本)。但這不是一個好主意,因為.zshrc它用於 zsh 的互動式設置——鍵綁定、別名等。環境變數設置(例如 PATH)適用於所有程序,因此它們應該在登錄時完成,通常在~/.profile. 將您的 PATH 設置從它所屬的位置.zshrc移動。.profile

引用自:https://unix.stackexchange.com/questions/413542