Emacs에서 쉘 스크립트 가져오기

Emacs에서 쉘 스크립트 가져오기

제 생각에는원천Emacs 내에서 환경 변수를 변경하는 쉘 스크립트입니다. 즉, 나는 쉘 스크립트가 Emacs가 실행되는 환경을 변경할 수 있기를 원하며, 실행 중인 Emacs 세션 내에서 이를 수행하고 싶습니다.

다시 말해서:

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

배경:

이는 제가 설명한 문제를 회피하려는 시도입니다.여기, 내가 필요한 곳에놓다 LD_LIBRARY_PATHEmacs를 실행하려면설정되지 않음특정 Python 배포판(파이썬).

특히 Emacs 패키지(이맥스제디) 이 Python 배포판에 대한 액세스가 필요하지만 현재는설정되지 않음 LD_LIBRARY_PATHEmacs를 먼저 시작하세요.놓다나중에 Emacs에서 사용할 수 있습니다 emacs-jedi.

이것이 가능한가?

답변1

스크립트를 얻기 위해 하위 쉘을 호출할 때마다 Emacs 응용 프로그램을 시작한 원래 프로세스에서 하위 프로세스를 호출하기 때문에 이것이 가능하지 않다고 생각합니다.

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

실험

사용 중이지만 .source 예제 파일 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

관련 정보