回答:
を使用している場合、$ 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
が答えです。