эхо "root" при использовании $ USER - PullRequest
2 голосов
/ 09 марта 2020

Я бы хотел лучше понять bash и при оценке переменных.

При использовании sudo пользовательская среда, которую можно проверить с помощью env, заменяется средой root , Следовательно, env и sudo env дают разные результаты.

Теперь, если я делаю sudo echo "I am $USER"!, результат будет I am my-username! вместо I am root!, предположительно, потому что переменная $ USER ищется перед sudo команда выполнена.

Как я могу использовать эту же команду, чтобы печатать I am root!? Нужны ли какие-то ключи или как-то изменить строку?

1 Ответ

7 голосов
/ 09 марта 2020

В команде sudo echo "$USER", bash сначала оценивает $USER, а затем выполняет команду. В этом случае будет напечатано ваше имя пользователя.

Если вы хотите напечатать имя пользователя root, расширение параметра должно быть выполнено от имени пользователя root. Это можно сделать с помощью команды bash -c:

sudo bash -c 'echo "$USER"'
...