
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
答え2
$ myuserのホームディレクトリをお探しですか?
awk -F: -v user=$myuser '$1==user { print $6 ;}' /etc/passwd
あなたはそれを使用することができます
awk -F: -v user=$myuser '$1==user { printf "%s/.ssh\n",$6;}' /etc/passwd
.ssh ディレクトリを取得します。