[Emacs] bash의 PATH 환경변수 eshell로 가져오기

개인적인 경우겠지만, bash를 기본 쉘로 이용하고 .bashrc에 개인적으로 이용하는 몇 가지 경로를 PATH에 추가해서 사용하고 있다. 이럴 때 Emacs를 쉘에서 띄우지 않은 경우 - 즉 OSX의 경우 Emacs를 GUI로 바로 실행한 경우 등 - 에는 PATH 정보가 틀리게 된다.

아래 코드를 이용하면 eshell이 실행 될 때 bash에서 사용하는 PATH 환경변수를 읽어서 그대로 eshell의 exec-path로 설정하게 된다.

(add-hook 'eshell-mode-hook
          'lambda nil
          (let ((bashpath (shell-command-to-string "/bin/bash -l -c 'printenv PATH'")))
            (let ((pathlst (split-string bashpath ":")))
              (setq exec-path pathlst))
            (setq eshell-path-env bashpath)
            (setenv "PATH" bashpath)))

내용은 간단하다. bash를 로그인 쉘로 로딩시켜서 PATH 환경변수를 emacs로 가져온다. 그리고 이를 eshell에서 쓰기 위한 문법으로 변형시켜서 eshell에 적용한다.

이 코드를 쓸 사용자는 많지는 않겠지만, 적어도 OSX에서 Emacs와 eshell을 사용한다면 제법 쓸 만 하다고 느껴진다.

댓글

익명님의 메시지…
딱 제가 사용하는 환경에서 필요한 기능이네요.
저도 osx 에서 emacs 를 사용하다가 path가 달라서 방법을 찾고 있었는데 이게 걸리더라구요.^^ 감사합니다.

이 블로그의 인기 게시물

소수점 제거 함수 삼총사 ceil(), floor(), round()

버전(Version)을 제대로 이해하기