Sudo como outro usuário para salvar o endereço do diretório inicial em um arquivo txt

Sudo como outro usuário para salvar o endereço do diretório inicial em um arquivo txt

Estou tentando salvar o diretório inicial de um usuário em um arquivo users.txt, mas continuo salvando o meu. O script pede ao usuário para inserir seu nome de usuário, que salvei em $username. Quando eu corro

ls ~ >> users.txt

Mostra ls home/student/am1014(qual é meu nome de usuário)

Presumo que preciso usar o sudo para armazená-lo, mas não sei como.

Responder1

Em:

sudo -u joe ls ~

~é expandido pelo seu shell antes de executar o comando (aqui sudo), então, na verdade, ele é executado:

sudo -u joe ls /home/me

Para listar o conteúdo do joediretório inicial de:

ls ~joe

Ou se você não tiver acesso de leitura ao diretório inicial:

sudo -u joe ls ~joe

Ou para um shell em execuçãocomojoepara expandir o ~:

sudo -u joe sh -c 'ls ~'

Observe que exceto em // cshvocê não pode usar a abordagem se o nome do usuário estiver em uma variável. Dependendo da cascatcshzshls ~joe

user=joe
echo ~$user

produziria /home/mejoeou ~joe. Em bash, se houvesse um usuário chamado $user(literalmente), isso retornaria seu diretório inicial.

Aqui você precisaria de:

eval "ls ~$user"

(você deve ter certeza de que $usercontém um nome de usuário válido antecipadamente).

Responder2

O seguinte comando será lido /etc/passwde geradousername : home-dir

awk -F: '{print $1":" $6}' /etc/passwd

A saída será algo como:

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games

Você pode redirecionar a saída para um arquivo usando:

awk -F: '{print $1":" $6}' /etc/passwd > result.txt

informação relacionada