回答:
を使用している場合、$ SUDO_USERは機能しませんsudo su -。
また、複数のチェックが必要です-もしそうなら$USER == 'root'取得し$SUDO_USERます。
コマンドの代わりにをwhoami使用してくださいwho am i。これによりwho、現在のセッションでフィルタリングされたコマンドが実行されます。必要以上の情報が表示されます。したがって、これを実行してユーザーのみを取得します。
who am i | awk '{print $1}'
代わりに(そしてより簡単に)を使用できますlogname。上記のステートメントと同じことを行います。
これにより、セッションにログインしたユーザー名がわかります。
これらはsudoまたはに関係なく機能しsudo su [whatever]ます。また、関係なく、何回の作品suとsudo呼ばれています。
who am iですwho mom likes。あなたの選択。
whoどちらも私の名前を含む2行をwho am i返し、何も返しません。何か助け?
who am iは何も実行せず、単純に見えるwhoためwho | awk '{print $1}'、期待どおりに機能します;)
awkインストールしていない場合に備えて、次のものを使用することもできますcut: who mom likes | cut -d' ' -f1 またはsed何らかの理由で: who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
$ SUDO_USERは有効だと思います。
#!/bin/bash
echo $SUDO_USER
whoami
sudo env表示するSUDO_USERがsudo echo $SUDO_USER何も出力しない...
sudo echo $SUDO_USER、bashはsudoを実行する前に $ SUDO_USERを評価しています。このソリューションに掲載されているスクリプトを試してみてください。
$SUDO_USERでは機能しませんsudo su -が、logname常に機能します。
sudoかどうかに関係なく、スクリプトを呼び出したユーザーのユーザー名を取得する方法は次のとおりです。
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
またはより短いバージョン
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
user=${SUDO_USER:-$(whoami)}またはuser=$(logname)
who am i | awk '{print $1}'私にはうまくwho|awk '{print $1}'いきませんでした
が、仕事に役立ちます
奇妙なことに、システムは実際のUIDと有効なUIDを区別しますが、これをシェルレベルでエクスポートするプログラムは見つかりません。
who am iが答えです。