Em:
sudo -u joe ls ~
~ é expandido pelo seu shell antes de executar o comando (aqui sudo ), portanto, em vigor, é executado:
sudo -u joe ls /home/me
Para listar o conteúdo do diretório inicial de joe :
ls ~joe
Ou se você não tiver acesso de leitura ao diretório inicial dele:
sudo -u joe ls ~joe
Ou para um shell executando como joe para expandir o ~ :
sudo -u joe sh -c 'ls ~'
Observe que, exceto em csh / tcsh / zsh , você não pode usar a abordagem ls ~joe se o nome do usuário estiver em uma variável. Dependendo do shell
user=joe
echo ~$user
produziria /home/mejoe ou ~joe . Em bash , se houvesse um usuário chamado $user (literalmente), isso retornaria seu diretório pessoal.
Aqui você precisaria:
eval "ls ~$user"
(você deve ter certeza de que $user contém um nome de usuário válido com antecedência).