나는 얻기 위해 노력하고 있어요 shell-command
및 async-shell-command
내에서 프로그램의 부부와 함께 완벽하게 통합되도록 .bashrc
특별히, 파일 direnv 이 예에서.
사용자 정의 shell-command-switch
하면 일반 대화 형 로그인 쉘 인 것처럼 프로파일을로드하는 쉘 프로세스를 얻을 수 있음을 발견했습니다 .
(setq shell-command-switch (Purecopy "-ic")) (setq explicit-bash-args '( "-ic" "EMACS 내보내기; stty echo; bash"))
exec-path-from-shell 도 사용하고 있습니다.
~/.bashrc
파일 이 있다고 가정 해보십시오 .
... 평가 "$ (direnv hook $ 0)" 에코 "foo"
내부 ~/code/foo
에는 다음 .envrc
과 같은 파일이 있습니다.
내보내기 PATH = $ PWD / bin : $ PATH 에코 "바"
나는 실행하는 경우 M-x shell
와 default-directory
로 설정 ~/code/foo
, bash 쉘이 올바르게 내 프로필을로드하고 내 길에 저를 추가 할 direnv 후크를 실행합니다 :
direnv : .envrc로드 중 바 direnv : 내보내기 ~ PATH ~ / code / foo $ echo $ PATH / Users / username / code / foo / bin : / usr / local / bin : ... # 나머지 $ PATH
그러나 default-directory
여전히 ~/code/foo
이고 run M-! echo $PATH
이면 .bashrc를 올바르게로드하지만 현재 디렉토리의 direnv 후크를 실행하지 않습니다.
푸 / usr / local / bin : ... # ./bin이없는 $ PATH의 나머지
내가 실행하면 동일한 결과가 나타납니다 M-! cd ~/code/foo && echo $PATH
.
내가 조언 또는으로 연결할 수있는 방법이 있나요 shell-command
또는 start-process
이 대화 형 쉘 버퍼로부터 전송되는 것처럼이 동작하도록하려면?
eval "$(direnv hook $0)"
입니다. 이것은 실행되지만 .envrc
파일이 있는 특정 디렉토리에있을 때 실행되어야하는 메커니즘 은 작동하지 않습니다.
.envrc
파일에 아무것도 평가되지 않습니까? 아니면 내 보내지 않은 환경 변수입니까? 이것을 재현 해 볼 수 있도록 완전한 예를 들어 주시겠습니까?
(setq shell-command-switch "-ic")
있고 평가 한 경우 ~ / .bashrc의 다른 모든 명령과 함께 평가해야합니다.