Вы никогда не должны анализировать /etc/passwd
напрямую. Возможно, вы находитесь в системе с удаленными пользователями, и в этом случае они не будут /etc/passwd
. /etc/passwd
Файл может быть где - то в другом месте. И т.п.
Если вам нужен прямой доступ к базе данных пользователей, используйте getent
.
$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh
$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer
Однако есть и другой способ, который не включает анализ:
$ user=phemmer
$ eval echo "~$user"
/home/phemmer
~
Оператор в оболочке расширяется в домашний каталог указанного пользователя. Однако мы должны использовать eval
потому, что расширение переменной $user
происходит после расширения ~
. Таким образом, используя eval
двойные кавычки и, вы эффективно расширяете $user
сначала, а затем звоните eval echo "~phemmer"
.
Когда у вас есть домашний каталог, просто прикрепите его /.ssh
к концу.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh