現在の tty のログインユーザーを取得する
getlogin
は、現在の tty ログインユーザー名を返します。
もし現在の tty ログインユーザーが得られなければ、undef
、
または、空文字列を返します。
my $user = getlogin || '[Unknown]';
print $user, "\n";
getlogin
は Linux の utmp
ファイルの内容から情報を取得しています。
例えば、Ubuntu なら utmp
ファイルは /var/run/utmp
にあります。
このファイルの内容を確認するには、who
コマンドを使います。
$ who /var/run/utmp
futomi tty2 2023-08-03 09:04 (tty2)
もし、この utmp
の仕組み、または、それに相当する仕組みがない環境では、
getlogin
は undef
を返します。
たとえば、Windows 11 上で動作する WSL (Windows Subsystem for Linux) が該当します。
なお、Windows 11 の PowerShell では、utmp
は存在しませんが、
getlogin
は期待通りに現在のユーザー名を返します。ただし、先頭 5 文字で切り取られます。
仮にシェルにログインした状態で getlogin
がうまく動作したとしても、
cron、バックグラウンド処理、CGI での動作においては、必ずしもユーザー名を取得できるとは限りません。
もし getlogin
でユーザー名が得られない場合は、
getpwuid($<)
を試すと良いでしょう。