sudoによって呼び出されるBashスクリプトでユーザーを識別する


108

以下/root/bin/whoami.shを含むスクリプトを作成すると、

#!/bin/bash
whoami

このスクリプトは、適切に構成されたsudoを持つユーザーによって呼び出されます。

root

スクリプトで実際のユーザーをすばやく取得する方法はありますか、またはこのユーザー名を渡すパラメーターを使用する必要がありますか?

回答:


134

を使用している場合、$ SUDO_USERは機能しませんsudo su -
また、複数のチェックが必要です-もしそうなら$USER == 'root'取得し$SUDO_USERます。

コマンドの代わりにをwhoami使用してくださいwho am i。これによりwho、現在のセッションでフィルタリングされたコマンドが実行されます。必要以上の情報が表示されます。したがって、これを実行してユーザーのみを取得します。

who am i | awk '{print $1}'

代わりに(そしてより簡単に)を使用できますlogname。上記のステートメントと同じことを行います。

これにより、セッションにログインしたユーザー名がわかります。

これらはsudoまたはに関係なく機能しsudo su [whatever]ます。また、関係なく、何回の作品susudo呼ばれています。


2
はい、+ 1 who am iが答えです。
Joe Kearney

43
に代わるものwho am iですwho mom likes。あなたの選択。
wchargin 14

3
whoどちらも私の名前を含む2行をwho am i返し、何も返しません。何か助け?
Hosh Sadiq 2014

7
私はUbuntu 16.04を使用していますが、コマンドwho am iは何も実行せず、単純に見えるwhoためwho | awk '{print $1}'、期待どおりに機能します;)
daveoncode

1
awkインストールしていない場合に備えて、次のものを使用することもできますcutwho mom likes | cut -d' ' -f1 またはsed何らかの理由で: who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
Yzmir Ramirez

56

$ SUDO_USERは有効だと思います。

#!/bin/bash
echo $SUDO_USER
whoami

1
奇妙なこと:sudo env表示するSUDO_USERsudo echo $SUDO_USER何も出力しない...
ジョブ

17
仕事、これは奇妙ではありません、それは期待されています。ではsudo echo $SUDO_USER、bashはsudoを実行する前に $ SUDO_USERを評価しています。このソリューションに掲載されているスクリプトを試してみてください。

@quadmore:答えに満足したら、それを受け入れることを忘れないでください。
ジョブ

2
を使用echo ${SUDO_USER:-$USER}してsudo、sudo以外の実行をキャッチすることもできます。しかし、エヴァンの答えは楽に logname聞こえる
トビアスキエンツラー

2
@TobiasKienzler-そして、evanが指摘するように、$SUDO_USERでは機能しませんsudo su -が、logname常に機能します。
David Harkness 2013

13

sudoかどうかに関係なく、スクリプトを呼び出したユーザーのユーザー名を取得する方法は次のとおりです。

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

またはより短いバージョン

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`

8
さらに短い:user=${SUDO_USER:-$(whoami)}またはuser=$(logname)
Tobias Kienzler 2013

3

who am i | awk '{print $1}'私にはうまくwho|awk '{print $1}'いきませんでした が、仕事に役立ちます


1
複数のユーザーがセッションを行っているホストではない
Roman Grazhdan


1

使用してwhoamiwho am iwhoidまたは$SUDO_USER右ここではありません。

実際にwhoは、質問の解決策にはなりません。ログインしたユーザーのみが表示されるため、数十に及ぶ可能性があります...

私の目には、唯一の価値ある答えはの使用ですlogname

お役に立てれば

ロブ


0

それが探しているUIDである場合(docker shenanigansに便利)、これは機能します。

LOCAL_USER_ID=$(id -u $(logname))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.