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).