
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 joe
diretó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çãocomojoe
para expandir o ~
:
sudo -u joe sh -c 'ls ~'
Observe que exceto em // csh
você não pode usar a abordagem se o nome do usuário estiver em uma variável. Dependendo da cascatcsh
zsh
ls ~joe
user=joe
echo ~$user
produziria /home/mejoe
ou ~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 $user
contém um nome de usuário válido antecipadamente).
Responder2
O seguinte comando será lido /etc/passwd
e 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