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.

답변2

매뉴얼 zsh인용 :

부르다

-i는 쉘 상호작용을 강제합니다.

그 다음에

쉘이 로그인 쉘인 경우 에서 명령을 읽은 /etc/zprofile다음 명령을 읽습니다 $ZDOTDIR/.zprofile. 그런 다음 셸이 대화형이면 /etc/zshrc 및 에서 명령을 읽습니다 $ZDOTDIR/.zshrc. 마지막으로 쉘이 로그인 쉘이라면 를 /etc/zlogin읽어보세요 $ZDOTDIR/.zlogin.

...

ZDOTDIR설정하지 않으면 사용 HOME됩니다.


따라서 .zshrc실행 초기에 강제 구매를 하기 위해서는

urxvt -e zsh -ci ranger

관련 정보