別のユーザーとしてsudoを実行して、ホームディレクトリのアドレスをtxtファイルに保存します。

別のユーザーとしてsudoを実行して、ホームディレクトリのアドレスをtxtファイルに保存します。

ユーザーのホームディレクトリを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

関連情報