
ユーザーのホームディレクトリをusers.txtファイルに保存しようとしていますが、自分のディレクトリは保存し続けます。スクリプトはユーザーにユーザー名の入力を求めますが、ユーザー名は$usernameに保存されています。
ls ~ >> users.txt
ls home/student/am1014
(私のユーザー名)が表示されます
保存するには sudo を使用する必要があると思いますが、方法がわかりません。
答え1
で:
sudo -u joe ls ~
~
は、コマンドを実行する前にシェルによって展開されます (ここではsudo
)。したがって、実際には次のように実行されます。
sudo -u joe ls /home/me
joe
のホームディレクトリの内容を一覧表示するには:
ls ~joe
または、ホームディレクトリへの読み取りアクセス権がない場合は、次のようにします。
sudo -u joe ls ~joe
または、シェルを実行する場合としてjoe
を展開するには~
:
sudo -u joe sh -c 'ls ~'
ユーザー名が変数内にある場合、except in csh
/ tcsh
/のアプローチはzsh
使用できないことに注意してください。シェルによって異なります。ls ~joe
user=joe
echo ~$user
/home/mejoe
は、または を出力します~joe
。 ではbash
、(文字通り) と呼ばれるユーザーがいた場合は$user
、そのユーザーのホームディレクトリが返されます。
ここで必要なもの:
eval "ls ~$user"
$user
(有効なユーザー名が含まれていることを事前に確認してください)。
答え2
次のコマンドは読み取り/etc/passwd
、出力しますusername : home-dir
awk -F: '{print $1":" $6}' /etc/passwd
出力は次のようになります。
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games
次のコマンドを使用して出力をファイルにリダイレクトできます。
awk -F: '{print $1":" $6}' /etc/passwd > result.txt