augtoolを使用して/ etc / passwdを解析できます。
myuser=bob
usershome=`augtool -L -A --transform "Passwd incl /etc/passwd" print "/files/etc/passwd/$myuser/home" | sed -En 's/\/.* = (.*)/\1/p'`
...しかし、少し複雑すぎるようです。
ユーザーのホームページを表示する簡単な専用ツールがあります(例usermod
:変化それ)?
ベストアンサー1
絶対に直接解析しないでください/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