Может возникнуть оговорка, если вы планируете читать переменную среды $USER в команде, начиная с sudo.
Расширение переменной Bash происходит до запуска sudo для переключения пользователей, это означает, что переменная $USER считывается из текущей среды до того, как sudo переключится на root.
$ echo $USER
bytecommander
$ sudo echo $USER
bytecommander
Если это не предназначено, и вам нужен метод, который вернет имя пользователя, которого он действительно запускает (обычно «root»), у вас есть как минимум три варианта для этого:
Run интерпретатор bash как root и передайте ему команду, которая содержит $USER. Вы должны убедиться, что команда заключена в одинарные кавычки, чтобы предотвратить интерпретацию текущего интерпретатора Bash:sudo bash -c 'echo $USER'
Использовать вывод команды вместо переменной среды $USER. Здесь есть, в основном, две команды, whoami и id -un: $ whoami
bytecommander
$ sudo whoami
root
$ id -un
bytecommander
$ sudo id -un
root
Более подробную информацию об этих командах можно найти, набрав man whoami и man id. Вы можете использовать эти команды как переменную и вставлять их в строку (например, путь к каталогу), как это, используя синтаксис подстановки команды Bash. Вот два примера, которые cd относятся к директории, названной в честь текущего пользователя:
cd /path/to/$(whoami)folder
cd /path/to/$(id -un)folder