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

おすすめ記事