ユーザーが与えられたらホームページに戻る方法は?

ユーザーが与えられたらホームページに戻る方法は?

私のスクリプトにUSER変数があり、HOMEその変数に基づいてUSER彼のパスを見たいです。どうすればいいですか?

答え1

/etc/passwdローカルファイル(LDAPなど)に保存されているかどうかに関係なく、ユーザー情報を見つけることができるユーティリティがあります。それは知られていますgetent

ここからユーザー情報を取得するには、次のコマンドを実行すると、getent passwd $USER次のメッセージが返されます。

[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash

これで、cutを使ってホームディレクトリを簡単に削除できます。

[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny

答え2

これを使用して、eval誰かのホームディレクトリを取得できます。

eval echo "~$USER"

少なくともローカルユーザーにとっては確実に機能します。 LDAPなどのリモートユーザーが使用されているかどうかはわかりませんeval

答え3

一般的な場所ですが、/home/$USER必ずしも普遍的なわけではありません。この情報を取得できる最終的な場所はファイルです/etc/passwd

ファイルは誰でも読むことができるので、誰でもそのコンテンツにアクセスできます。
$USERがファイルに存在する場合、最後のエントリはユーザーのホームディレクトリです。

これにより、項目が選択され、ホームディレクトリが印刷されます。

awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"

より複雑な(リモート)システムでは、getentはNSS(Name Service Exchange)システムからユーザー情報を取得する一般的なコマンドです。

コマンド

getent passwd "$USER" | cut -d : -f 6

可能であれば、同等の情報が提供されます。

答え4

rootとしてログインしている場合、パスワードを知っているか、パスワードがUSERない場合は、次のオプションがあります。USER

    su -c 'echo ~' ${USER}

標準su動作でUSER定義されていないか空の場合は、suコマンドをrootとして実行しようとします。

値がUSER有効なユーザー名ではない場合、対応するエラーが発生しますsu: user <user> does not exist

ここにはすでに良い答えがたくさんありますが、まだ誰かに役立つかもしれません。

関連情報