Також, чи завжди ці змінні відповідатимуть ім'ям користувача, що ввійшов у даний момент (вони є в моїй системі Debian)? Чи можу я припустити їх наявність у інших системах Unix (-подобних)?
Мені також цікаво, чому можна використовувати whoamiзамість того, щоб просто прочитати будь-яку з цих змінних.
USERі USERNAMEє звичайними змінними середовища, що означає, що при бажанні ви можете встановити їх на довільні значення. Просто введіть USER=xyz. Іншими словами, навіть якщо ці змінні існують, немає гарантії, що їх значення відповідають поточному введеному користувачеві ім'я користувача.
guarantee, я мав на увазі за замовчуванням (тобто припускаючи, що користувач їх не змінив).
sudo whoamiтаsudo echo $USER
sudo echo $USERоболонка розширюється $USER, потім викликає sudo. Так що, звичайно, це не дає такий самий вихід, як whoami. Мовляв sudo whoami, sudo sh -c 'echo $USER'робить (як правило) вихід root. Що стосується Вашого коментаря щодо whoamiвикористання EUID , зауважте, що sudo whoamiвін видаватиметься rootнавіть у разі whoamiвикористання UID. sudoвстановлює і EUID, і UID для команди, яку вона виконує (за винятком дуже незвичної ситуації, коли ви явно налаштовуєте її на інше поведінку). Порівняйте sudo id -uз sudo id -ru.
manсторінку,whoamiповідомляє ім’я, пов’язане з вашим ефективним ідентифікатором користувача. Це означає, що він поверне щось інше, якщо ви використовуєтеsudoабо запускаєте виконувану програму. Якщо виsudoналаштували, спробуйте,sudo whoamiнаприклад.