someuser のホーム ディレクトリが /home/someuser であるとします。
NAME=あるユーザー
bash では、チルダ (~) と $NAME を組み合わせてユーザーのホーム ディレクトリを返すには、どのような式を使用しますか?
HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser
助言がありますか?
someuser のホーム ディレクトリが /home/someuser であるとします。
NAME=あるユーザー
bash では、チルダ (~) と $NAME を組み合わせてユーザーのホーム ディレクトリを返すには、どのような式を使用しますか?
HOMEDIRECTORY=~someuser
echo $HOMEDIRECTORY
/home/someuser
NAME=someuser
echo ~$NAME
~someuser
助言がありますか?
より安全:
eval HOMEDIRECTORY="$(printf "~%q" "$NAME")"
ここでは、危険な文字%q
を引用してエスケープするオプションがあります。printf
$NAME
joe の場合、 のようなものが得られます/home/joe
。root の場合、/root
. 「abc;rm something」の場合、何かが削除される代わりに「~abc;rm something」が得られます。
アクセスできる場合getent
:
getent passwd "$NAME" | cut -d: -f 6
bashとcshの興味深い違いは、〜$VARNAMEが実際に期待どおりの動作をすることです。
これは醜いですが、bashで機能するようです:
homedir=`eval "echo ~$USERNAME"`
これで、$homedirは$USERNAMEに関連付けられたホームディレクトリを保持します。
チルダ(〜)は$ HOMEと同じなので、すべてのユーザーが同じディレクトリをホームにするためのルートを持っているわけではありません。
ただし、チルダの使用を主張する場合は、次の作業を行ってください。
echo ~/../$NAME
見る:
$ pwd
/home/oreyes
$ export NAME=john
$ export DIRECTORYNAME=~/../$NAME
$ cd $DIRECTORYNAME
$ pwd
/home/john
1 つの代替方法
awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd