Emacs 내에서 쉘 스크립트 소싱

Emacs 내에서 쉘 스크립트 소싱

나는하고 싶다원천Emacs 내에서 환경 변수를 변경하는 쉘 스크립트. 즉, Emacs가 실행되는 환경을 변경하는 쉘 스크립트를 원하고 실행 중인 Emacs 세션 내에서 이 작업을 수행하고 싶습니다.

다시 말해서:

  1. 나는 Emacs를 시작한다.zsh
  2. zsh나는 Emacs 내에서 다음과 같은 환경 변수를 변경하는 스크립트를 소스로 만들고 싶습니다 .LD_LIBRARY_PATH

배경:

이는 제가 설명한 문제를 회피하려는 시도입니다.여기, 내가 필요한 곳세트 LD_LIBRARY_PATHEmacs를 실행하려면설정되지 않음특정 Python 배포판을 실행하는 데 사용됩니다(아나콘다).

특히 Emacs 패키지(이맥스 제다이) 이 Python 배포판에 액세스해야 하지만 현재는설정되지 않음 LD_LIBRARY_PATH먼저 Emacs를 시작하려면 다음을 수행해야 합니다.세트emacs-jedi나중에 Emacs 내에서 사용할 수 있도록 말이죠 .

이것이 가능합니까?

답변1

나는 이것이 가능하다고 생각하지 않습니다. 왜냐하면 스크립트를 소싱하기 위해 서브쉘을 호출할 때마다 emacs 애플리케이션이 시작된 원래 프로세스에서 하위 프로세스를 호출하기 때문입니다.

환경 변수 내보내기는 상위 프로세스만 하위 프로세스에 변수를 제공할 수 있지만 하위 프로세스는 상위 환경을 조작할 수 없는 일방적인 방법입니다.

실험

사용하고 있지만 vim에도 동일하게 적용되어야 합니다 emacs. 소스에 대한 샘플 파일입니다.

$ more ~/vars.bash 
export VAR=somevalue
  1. 초기 상위 환경이 $VAR설정되지 않았습니다.

    $ echo $VAR
    
    $
    
  2. 시작하다 vim. 그런 다음 하위 쉘을 호출하여 위 파일( :sh)을 소스로 제공합니다.

    # check variable
    $ echo $VAR
    
    $
    
    # source and re-check
    $ source ~/vars.bash
    $ echo $VAR
    somevalue
    
  3. 서브쉘을 종료하고 vim으로 돌아갑니다. 그런 다음 다른 서브셸( :sh)을 호출합니다.

    $ exit
    
    ... back in vim, do another `:sh` ...
    
    # check variable
    $ echo $VAR
    
    $ 
    

답변2

Emacs를 로드한 후 LD_LIBRARY_PATH를 설정 해제하는 것뿐이라면 다음을 추가하세요.

(setenv "LD_LIBRARY_PATH")

~/.emacs또는 다른 초기화 파일 에 .

앞뒤로 바꿔야 하는 경우 (getenv "LD_LIBRARY_PATH")먼저 결과를 변수에 저장하여 나중에 복원할 수 있습니다.

답변3

나는 소싱 전후 diff의 명령 출력을 비교 하고 그에 따라 함수를 호출하는 데 사용되는 멋진 Emacs lisp 조각을 발견했습니다 . exportsetenvhttps://gist.github.com/ffevotte/9345586

관련 정보