У меня есть USER
переменная в моем скрипте, и я хочу видеть его HOME
путь на основе USER
переменной. Как я могу это сделать?
bash
shell-script
users
MatthewRock
источник
источник
~foo
с переменными вbash
. Во всяком случае, не напрямую.~
действительно кажется вкладка-расширение, хотя и другой билд поведение тильды-префикс должно быть заменено на имя путем первоначального рабочего каталога , связанный с именем пользователя , полученным с помощьюgetpwnam()
функции и поэтому , вероятно , что поиск очень хорошо. мне не нравятся расширения вкладок, хотя - я люблю печатать вкладки.Вы можете использовать,
eval
чтобы получить чей-то домашний каталог.По крайней мере, для локальных пользователей это работает точно. Я не знаю, обрабатываются ли удаленные пользователи, такие как LDAP
eval
.источник
eval
нужен. Bash не обрабатывает~foo
после расширения переменной.USER
.$USER
расширяется до всего одной строки алфавитных символов.Обычное место есть
/home/$USER
, но это не обязательно должно быть универсальным. Определенное место для поиска такой информации находится внутри файла/etc/passwd
.Этот файл доступен для чтения всем (любой может его прочитать), поэтому любой пользователь имеет доступ к его содержимому.
Если в файле существует $ USER, запись, предшествующая последней, является пользовательским каталогом HOME.
Это выберет запись и распечатает каталог HOME:
В более сложных (удаленных) системах getent - это обычная команда для получения информации о пользователях из системы NSS (библиотеки Service Name Switch).
Команда
Предоставит эквивалентную информацию (если имеется).
источник
Если пользователь не существует,
getent
вернет ошибку.Вот небольшая функция оболочки, которая не игнорирует код выхода
getent
:Вот пример использования:
источник
Если вы вошли в систему как пользователь root, если вы знаете
USER
пароль или если уUSER
него нет пароля, следующий вариант - еще один вариант:При стандартном
su
поведении, еслиUSER
он не определен или пуст, онsu
попытается выполнить команду от имени пользователя root.Если значение
USER
не является допустимым именем пользователя, то будет поднят соответствующая ошибка:su: user <user> does not exist
.Здесь уже есть много хороших ответов, но это может кому-то помочь.
источник