回答:
環境変数から、
$LOGNAME
$USER
与えるものと同じ
現在ログインしているユーザーの名前。この変数はシステムによって設定されます。値を手動で変更しないでください。
から man logname
logname-ユーザーのログイン名を出力します
次の例で使用方法が異なる Expained :
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
ここでは、ターミナルにrootとしてログインした後の違いを確認できます。
$LOGNAME
端末に現在ログインしているユーザーの名前を示します(つまりroot
)logname
にログインしたユーザーのログイン名を印刷します(つまりpandya
)16.04ではユーティリティのログ名が壊れていますが、これは意図的なものであり、返される値をハッキングすることが可能であり、セキュリティ上の欠陥である可能性があります。 https://bugzilla.gnome.org/show_bug.cgi?id=747046 一部のスクリプトでlognameを使用していて、それを私自身のレベルまたはsudo呼び出しからの環境変数$ USERおよび$ LOGNAMEはそうではありません。私は誰かが私のコンピュータに侵入して、それが返す値を変更することを心配していませんでした。ああ....回避策を見つけました。そのようにホームディレクトリにファイルを作成しました
echo $USER > ~/.logname
私が自分のログ名にアクセスする場合(たとえば、Bash変数g_lognameに割り当てる)、こうすることでアクセスします。
declare g_logname="$(<~/.logname)";
これは、自分自身でも、sudoを介したルートレベルでも機能します。ホームディレクトリとして「〜」の割り当てを維持します。システム上の各ユーザーのホームディレクトリ用の.lognameファイルを作成できます。はい、誰かが私のコンピュータに侵入してこれらのファイルを変更する可能性がありますが、私はそれについて本当に心配していません。スクリプトを機能させたいだけです。