2011-02-04 6 views
0

私はsudoのmacportsバージョンをインストールしました。 1つのことを除いて、すべてがうまくいきます。 Python 2.6を使用して~をユーザーのホームディレクトリに展開すると、Snow Leopardに付属するsudoのバージョンとは異なる出力になります。例えばMacports sudoがpythonの/ var/rootに展開します

は次のPythonコードを検討:以下

#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

私はこれがMacPorts版のsudoのためだとは思わない。私はsudoに戸惑っていません。もし 'sudo -i'、' cd〜 '、' pwd'を実行すると '/ var/root'という出力も出ます。おそらく 'os.path.expanduser'が特権エスカレーションに関係なく現在のユーザのパスを取得するためにPythonで使用するのが適切であるかどうか尋ねるべきでしょうか? (on stackoverflow) – Ricket

+0

@Ricket:sudo -iを使用すると、実際には新しいユーザのホームディレクトリに変更して新しいシェルを開くことを直接指定しています。しかし、-iなしでsudoを使うのは、奇妙な動作が現れる場所です。 –

答えて

2

HOME環境変数は〜に展開するものを制御します。あなたのMacPortsにインストールされたsudoのバージョンが、HOMEインストールをrootユーザーのホームディレクトリにリセットしているように聞こえますが、システムインストールのバージョンはそうではありません。入力した場合はどうなりますsudo sh -c 'echo $HOME'

+2

ケビンの答えは正しいです。彼は '' echo $ HOME "'ではなく '' echo $ HOME''を使うように頼んだことに注意してください。違いがあります。後者の場合、$ HOMEは元のシェルに置き換えられていて、sudoで編集されたものではありません。 '/ opt/local/share/doc/sudo/NEWS'のMacPortsのバージョンであるsudo 1.7.4のNEWSファイルを読んでください。 Apple 1.7.0のバージョンとの違いがあります: "HOMEとMAIL環境変数がリセットされました..." –

+0

@NedDeily:aha!/ –

+0

fyiを読んでいるはずです。これに基づいて 'sudo/opt/local/sbin/visudo'を実行し、' env_keep + = HOME'を追加(またはコメントを解除するか、覚えていないこと)できます。 –

関連する問題