2011-02-04 2 views
0

sudo의 macports 버전을 설치했습니다. 한 가지는 제외하고 모두 잘합니다. Python 2.6을 사용하여 ~을 사용자의 홈 디렉토리로 확장하면 Snow Leopard와 함께 제공되는 sudo의 버전과 다른 결과가 발생합니다. Macports sudo가 ~에서/var/root로 확장됩니다.

#expand_home_dir.py 
import os 

os.path.expanduser('~') 

아래는 위에 나열된 코드의 3 개 가지 통화 있습니다

예를 들어 다음 파이썬 코드를 고려하십시오.

robert$ python2.6 expand_home_dir.py 
/Users/robert 
robert$ sudo python2.6 expand_home_dir.py 
/var/root 
robert$ /usr/bin/sudo python2.6 expand_home_dir.py 
/Users/robert 

어떤 생각이 왜 이런 일이 : 내 $PATH/opt/local/bin로 시작하기 때문에 sudo는을 사용하여 첫 번째 통화는 MacPorts의 버전을 사용합니까?

+0

나는 이것이 sudo의 MacPorts 버전 때문인 것 같지 않습니다. 나는 sudo를 망치지 않았다. sudo -i를 쓰면'cd ~','pwd'도'/ var/root'를 출력한다. 아마도'os.path.expanduser'가 권한 승격과 관계없이 현재 사용자의 경로를 얻기 위해 파이썬에 사용하는 것이 적절한 지 묻는 것이 좋습니다. (on stackoverflow) – Ricket

+0

@Ricket : sudo -i를 사용하면 실제로는 새로운 사용자의 홈 디렉토리로 변경하고 새 쉘을 열 것을 직접 지정합니다. 그러나 -i없이 sudo를 사용하는 것은 이상한 행동이 나타나는 곳입니다. –

답변

2

HOME 환경 변수는 확장 할 대상을 제어합니다. MacPorts가 설치된 sudo 버전이 HOME을 루트 사용자의 홈 디렉토리로 재설정하고 시스템 설치 버전은 그렇지 않은 것으로 들립니다. sudo sh -c 'echo $HOME'을 입력하면 어떻게 되나요?

+2

케빈의 대답이 정확합니다. 그는''echo $ HOME ''이 아닌''echo $ HOME ''을 사용하라고 요청했습니다. 차이가 있습니다. 후자의 경우, $ HOME은 sudo-ed가 아닌 원래 쉘로 대체됩니다. 현재 MacPorts 버전 인'/ opt/local/share/doc/sudo/NEWS'의 sudo 1.7.4에 대한 NEWS 파일을 읽으십시오. Apple 1.7.0 버전과 "HOME 및 MAIL 환경 변수가 재설정되었습니다 ..."라는 변경 사항이 있습니다. –

+0

@NedDeily : 아하!/ –

+0

fyi를 읽었어야하는데, 이것에 기반하여'sudo/opt/local/sbin/visudo'를 실행하고'env_keep + = HOME'을 추가 (또는 주석 처리를 해제하고 기억할 수 없음)하여 해결했습니다. –

관련 문제