Bashから各ユーザーの.sshディレクトリを取得する安定した方法は何ですか?

Bashから各ユーザーの.sshディレクトリを取得する安定した方法は何ですか?

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 ディレクトリを取得します。

関連情報