OSX에서 이맥스 및 명령 행 $ PATH 불일치


18

PATH내 Haskell 환경에 영향을 미치는 Emacs 설정에 문제가 있습니다.

ZSH를 사용하고 있으며 명령 줄로 이동하여을 호출 echo $PATH하면 다음이 반환됩니다./Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

이것은 .zprofile내가 가지고있는 구성에서 나옵니다 .

# Set the list of directories that Zsh searches for programs.
path=(
  ~/Library/Haskell/bin
  /usr/local/{bin,sbin}
  $path
)

따라서 명령 줄에서을 호출 which cabal하면 올바르게 얻습니다./Users/g/Library/Haskell/bin/cabal

내가 이맥스를 시작하고 갈 때 shell와 호출 which cabal, 내가 얻을 : /usr/bin/cabal어떤은 다른 버전 이후 나 발행의 원인이됩니다.

나는 검사 할 때 echo $PATH이맥스에서 shell, 나는 참조 :/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin

나는 지구상에서 어떻게 PATH다를 수 있는지 전혀 모른다 ...

누구든지 내 ZSH쉘과 Emacs가 같은 것에 동의 하도록하는 방법을 알고 PATH있습니까? 나는 그것이 어디 cabal에서로드되고 있는지를 제어하고 있다고 생각합니다 .

업데이트 : echo $SHELLEmacs 인쇄에서 실행 :/bin/zsh

업데이트 2 : 이것은 OSX에 있습니다.

업데이트 3 : exec-path-from-shell 모듈 을 사용하려고 시도했지만 작동하지 않습니다. 여전히 같은 문제가 있으며 부작용으로 터미널 테마 색상이 엉망이됩니다.

업데이트 4 : Emacs를 통해 설치 했으며이 brew install --cocoa --srgb emacs방법으로 연결된 emacs를 실행합니다.

~ ❯❯❯ which emacs
/usr/local/bin/emacs
~ ❯❯❯ l /usr/local/bin/emacs
lrwxr-xr-x  1 g  admin    30B 29 Jan 18:34 /usr/local/bin/emacs -> ../Cellar/emacs/24.4/bin/emacs
~ ❯❯❯ l /usr/local/Cellar/emacs/24.4/bin/emacs
-r-xr-xr-x  1 g  admin    87B 29 Jan 18:34 /usr/local/Cellar/emacs/24.4/bin/emacs

ZSH를 로그인 쉘로 사용하고 있습니까?
wasamasa

정확히 로그인 쉘이 무엇을 의미하는지 잘 모르겠지만 chsh..., 하루 중 기본 쉘을 변경하기 위해 다시 전화 한 것 같습니다
Galder Zamarreño

나는 iTerm2 btw를 사용하고 있습니다 ...
Galder Zamarreño

2
분명히하지에 PATH를 수정 ~/.profile하거나 /etc/profile다음.
wasamasa

1
환경 변수를로 설정하십시오. ~/.zshenv소스는 일관되게 제공되지만 셸이 시작됩니다 (대화식 대 비 대화식). 경우 exec-path-from-shell터미널 테마 색을 엉망으로, 당신은 설정할 수 있습니다 exec-path-from-shell-argumentsnil호출하기 전에 exec-path-from-shell-initialize반드시 그것이 당신의 zsh을 설정의 상호 작용 부분을 실행하지 않는 것 확인합니다.
sanityinc

답변:



8

이것은 OSX 성가신 환경 문제이며, $PATHEmacs에 나타나는 것은 /etc/paths파일에서 나옵니다 . 그러면 쉘에서 설정 한 내용이 추가됩니다. 파일 /Users/g/Library/Haskell/bin상단에 추가 /etc/paths한 다음 제대로 작동했습니다.

쉘로 들어가서 echo $PATHEmacs에 전화하면 다음과 같이 표시됩니다./Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin

그리고 cabal의 버전은 실제로 cabal-install version 1.22.2.0: D

모두 감사합니다 !!


$PATHOSX post 에 대한 힌트를 주신 beOn에게 감사드립니다 .
Galder Zamarreño

2
더 나은 해결책은의 경로를 수정하는 것입니다 ~/.zshenv. 변경 사항은 Emacs의 PATH
Galder Zamarreño

나는 단순히 다음에 호출 할 때 echo export PATH=$PATH > ~/.zshenvEmacs가 M-x shell그것을 선택 하게 한다는 것을 확인할 수 있습니다 .
Linus Arver

5

GUI 환경 (gnome, kde 등)에서 emacs를 시작하면 쉘 시작 스크립트가 사용자 환경으로 제공되지 않습니다. 따라서 $PATH신중하게 설정 한 내용은 .zsh로드되지 않습니다. GUI 환경은 일반적으로 소스를 제공하지 않지만 ~/.profile파일을 로드 할 수 있습니다.

이것을 당신의 추가 할 수 있습니다 .pam_environment:

PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin

GUI 세션을 다시 시작하여로드해야합니다.

이 문서는 $PATH변수를 올바르게 설정 하는 데 도움이 될 수 있습니다 .

https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables

~/.pam_environment파일을 사용하여 쉘 또는 emacs 프로세스에서 액세스 할 수있는 환경 변수를 관리합니다.

추신 : 한 평범한 논평자는 아마도 당신이 Mac에있을 것이라고 지적합니다. $PATHMac GUI에서 설정하는 방법을 모르지만 요점은 여전히 ​​셸 환경과 GUI 환경의 차이와 관련이 있습니다. $PATHGUI 설정 방법 은 OS 버전에 따라 다릅니다. 그러나 다음을 사용할 수 있습니다.

(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))

당신에 ~/.emacs.d/init당신은 작업을해야하는 솔루션을 원하는 경우.

PPS : emacs에서 쉘을 실행하려면을 사용 ansi-term하는 것이 좋습니다 shell.


질문자가 iTerm 2 의 사용을 언급했을 때 Linux에 관한 질문은 의심 스럽습니다 .
wasamasa

3

PATH의 일부가 손실되면 ~ / .emacs에 추가 할 수 있습니다.

;;; We add /path/to/something/extra by appending it to the path
(setenv "PATH" (concat (getenv "PATH") ":/path/to/something/extra"))
;;; /path/to/something/extra is now at the end of the PATH.
;;; or you can use:
;(setenv "PATH" (concat "/path/to/something/extra:" (getenv "PATH")))
;;; /path/to/something/extra is now at the beginning of the PATH.

PATH 문제를 피하기 위해 항상 ~ / .bashrc에서 내 보낸 PATH를 사용하여 명령 줄에서 emacs를 시작합니다.


2

이를 수행하는 또 다른 방법은 쉘에 로그인 쉘임을 알려 주어 올바른 모든 파일을 제공하도록하는 것입니다. 으로 설정 explicit-bash-args하여 bash에 대해이 작업을 수행 합니다 ("--noediting" "--login"). zsh와 동등한 것으로 설정 explicit-zsh-args되는 것처럼 보입니다 ("-l").

그래서 내 .emacs:

(setq explicit-bash-args '("--noediting" "--login"))

당신의 것 :

(setq explicit-zsh-args '("-l"))

나는 이것이 "--noediting"불필요 하다고 생각하고 zsh에게 이것에 대해 말할 수있는 방법이없는 것 같지만, 이것이 원하는대로 작동하지 않으면 조사해야 할 수도 있습니다.


1
이것은 Emacs에서 실행되는 쉘에서 작동합니다. via와 같은 Emacs 내에서 직접 실행되는 명령에는 작동하지 않습니다 M-x shell-command.
mernst

1

예를 들어 다음과 같은 속성 목록을 저장하여 OS X 전체 기본 경로를 설정할 수도 있습니다 ~/Library/LaunchAgents/my.startup.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

새 경로는 로그 아웃 한 후 다시 로그인 한 후 쉘, Emacs 및 기타 응용 프로그램에 표시되어야합니다.

이 방법은 로그인 항목으로 열린 응용 프로그램에서 또는 강제 종료 후 로그인시 응용 프로그램을 다시 열 때 경로를 변경하지 않습니다. 로그인 항목의 경로를 변경하려는 Emacs, 터미널 응용 프로그램 또는 기타 응용 프로그램이 있으면이를 제거해야합니다.

10.9 이하에서는 다음과 같은 행을 추가 할 수도 있습니다 /etc/launchd.conf.

setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

그러나 /etc/launchd.conf10.10에서는 지원 이 제거되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.