他のユーザーの環境変数を取得する[終了]


23

他のユーザーの環境変数を見る方法はありますか?rootでそれをしたいので、パーミッションは問題にならないでしょう。

ユーザー自身には、echo $PATHまたはset | grep PATH(またはset変数名を覚えていない場合)を使用します。他のユーザーにとって同様の指示は何でしょうか?

価値があるのは、Ubuntu Server 13.04です。


4
ユーザーには環境変数はありませんが、プロセスにはあります。1人のユーザーが実行するプロセスは、すべてが同じ環境ではないことが一般的です。どのような問題を解決しようとしていますか?
ジル「SO-悪であるのをやめる」

たとえば、@ Gilles、ユーザーが持っているMAILフォルダーを知りたいです。そのユーザーとしてログインしてからログインできますecho $MAILが、ショートカットがあるかもしれないと思いました。

3
それでも、質問を有効に定義することはできません(たとえば、受け入れた回答は、多くの要因に応じて機能する場合と機能しない場合があります)。デフォルトのメールボックスの場所をお探しですか?ユーザーが実際にローカルメールを受信する場所を探していますか(ユーザーがを持っている場合、異なる場合があり、存在しない場合があります.forward)。ユーザーは多くの場合、自分.profileまたは他の構成ファイルにいくつかの変数を設定しますが、それらをすべて確実に列挙する方法はありません。繰り返しますが、どのような問題を解決しようとしていますか?
ジル 'SO-悪であるのをやめる'

回答:


20

別のオプションはを使用することenvです。これを実行root

sudo -Hiu $user env | grep $var

例えば

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
ルートとしてログインし、標準ユーザー名に対してこのコマンドを実行すると、が表示されますHOME=/root。これがルートのホームディレクトリですが、標準のホームディレクトリではありません。特定のユーザーがログインしたときに取得する環境を知りたい場合は、この特定のユーザーのログインシェルの起動スクリプトを実行する必要があります(ログインシェルはログインシェルと異なる場合があることに注意してください)。
ウーヴェ

@Uweはどのシステムですか?それは私のためにうまく機能します。あなたがでログイン意味するかrootログインマネージャから?ttyにドロップしてとしてログインすると正常に動作しますroot
テルドン

私はDebianマシンにいます。uweとしてログインし、xtermを開き、実行env | grep HOMEして取得しHOME=/home/uweます。実行suしてからもう一度env | grep HOME取得してHOME=/rootから、実行sudo -u uwe env | grep HOMEしてまだ取得しHOME=/rootます。
ウーヴェ

@おかしい また、Debian(LMDE)マシンを使用しています。説明したプロセスとまったく同じプロセスを実行し(xterm通常の端末の代わりに使用した場合でも)、期待どおりの結果が得られます。
テルドン

マニュアルに従ってsudo-Hオプションが存在するか、対応するエントリ/etc/sudoersが設定されている場合にのみ、HOME変数を設定します。sudoersファイルが異なるようです。とにかく、-Hここで使用することをお勧めします-i
ウーヴェ

2

1人のユーザーに対して、次のようにすることができます。

su - <username> -c '. ~/.profile; echo $PATH'

すべてのユーザーの$ PATHをリストします。

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@カミル・ステープス

. ~/.profile私の好きな人、ピータース・クルミンズから学ぶトリックです。彼はここでトリックを説明し。たぶん後のbashバージョンにはオプションでビルドがありましたNON_INTERACTIVE_LOGIN_SHELLS


ありがとう!以下のために$PATH、それはまたなしで動作. ~/.profile; 部分-それは何のためにあるのですか?

@CamilStaps「機能する」とはどういう意味ですか?はい、$PATHソースなしでも値を取得できますが、~/.profileほとんどの場合、これは必要な値ではありません(=このユーザーがログインしたときに表示される値)。~/.profileユーザーは起動ファイルがと異なるシェルを使用する可能性があるため、ソーシングでさえも完全に信頼できるものではありません~/.profile
ウーヴェ

@Uweなしで同じ出力が得られましたが、それは単なる偶然でしょう。

ユーザーがcshを使用していないと仮定しています。
グレンジャックマン

@CamilStaps最初の質問は、その特定のユーザーが自分のPATHを変更するかどうかです~/.profile。しかし、いずれにせよ、の動作はsudoかなり設定することができます/etc/sudoers(terdonとの私の議論を参照)。システムの動作が異なる場合、おそらく設定ファイルの違いが原因です。
ウーヴェ

0

rootからsu -ユーザーにアクセスして、表示する環境変数をgrepします。

su - <username> -c 'echo $PATH'


何らかの理由で、コマンドが別のユーザーとして実行されても、これは私には機能しません。私は「env」を使用することになったので、sthのようrunuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2なものは私にとってはうまくいきます。ルートでない場合は、コマンドの前にを付ける必要がありますsudo
Andrei-Niculae Petre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.