Також, чи завжди ці змінні відповідатимуть ім'ям користувача, що ввійшов у даний момент (вони є в моїй системі 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
наприклад.