Вы никогда не должны анализировать /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