LINUX.ORG.RU
ФорумAdmin

Вывод домашнего каталога пользователя по его id

 ,


1

3

Доброго времени суток. Такой вопрос. Есть ли команда, которая выводит по id пользователя его домашний каталог. Так уж сложились звезды на этикетке коньяка, что есть пользователь v.pupkin, а домашний каталог у него v.popkin. И переименовать, Вы не поверите, мешает много факторов. И такой случай мешает в написании скриптов. Например:

#!/bin/bash

USER_NAME=v.pupkin
               
echo "text" >> /home/"$USER_NAME"/text.txt

уже не сработает, т.к. каталога с именем $USER_NAME нет. Вот здесь бы и хотелось подставить команду, возвращающую домашний каталог пользователя по его id.
#!/bin/bash

USER_NAME=v.pupkin
               
echo "text" >> /home/$(idhome "$USER_NAME")/text.txt

Подозреваю конечно, что мне нужна доза RTFM, но и нагуглись тоже не смог. У самой id, как я понял, таких ключей нет.

что мне нужна доза RTFM, но и нагуглись тоже не смог

А ты в /etc/passwd загляни

Kroz ★★★★★
()
Ответ на: комментарий от anonymous

+1


$getent passwd $UID |tr ':' ' '| awk '{print $(NF-1)}'

$getent passwd $UID|awk 'BEGIN{FS=":"}{print $(NF-1)}'



$getent passwd $UID|awk -F: '{print $(NF-1)}'
qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 1)

Самый короткий вариант на bash без лишних зависимостей:

echo $(eval echo ~$USER)
echo $(eval echo ~$(id -nu $UID))

ArcFi
()

не факт что его хомяк находится в /home

snaf ★★★★★
()
Ответ на: комментарий от anonymous

eval там не нужно

Нужно, чтобы передавать имя/идентификатор юзера через переменную.

а id -nu $UID сам пробовал?

$ getent passwd $USER
admin:*:1101381:1100513:Системный администратор:/home/KOLA/admin:/bin/false

$ echo $(eval echo ~$USER)
/home/KOLA/admin

$ echo $(eval echo ~$(id -nu $UID))
/home/KOLA/admin


Если да, в какой ОС?

Fedora 23.

ArcFi
()
Ответ на: комментарий от ArcFi

Нужно, чтобы передавать имя/идентификатор юзера через переменную.

Попробуй без. У меня одинаково работает.

Fedora 23.

У меня в Debian 7 не работае:

> LC_ALL=C id -nu 106
id: 106: No such user
anonymous
()
Ответ на: комментарий от anonymous

У меня одинаково работает.

А, это я из-за раскрытия тильды в zsh затупил, ты прав.

anonymous
()
Ответ на: комментарий от anonymous

Попробуй без. У меня одинаково работает.

Попробовал, у меня не работает:

$ echo ~$(id -nu $UID)
~admin

$ echo ~$USER
~admin

$ rpm -q bash
bash-4.3.42-3.fc23.x86_64

У меня в Debian 7 не работае

# rpm -qf $(which id)
coreutils-8.24-6.fc23.x86_64


Либо у меня coreutils новее, либо иначе собран, либо что-нибудь со стороны влияет, типа /etc/nsswitch.conf.

ArcFi
()
Ответ на: комментарий от ArcFi

Самый короткий вариант на bash без лишних зависимостей:

echo $(eval echo ~$USER)
echo $(eval echo ~$(id -nu $UID))

Вот вроде бы то, что нужно. Спасибо.

P.S. Все-таки man-ы покурить нужно...

minasrost
() автор топика
Ответ на: комментарий от ArcFi

f --rn --rm

Могу ошибаться, но какие-то такие комби для «Антикса» подходили, вроде?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.