O shell que está fazendo a expansão do curinga *
é o shell onde você o digita. Se o shell tiver permissão para ler a lista de arquivos no diretório, ele expandirá /temp/sit/build/*
para /temp/sit/build/file
e executará sudo
com os argumentos ls
, -l
e /temp/sit/build/file
. Se o shell não conseguir encontrar qualquer correspondência para /temp/sit/build/*
(seja porque não há correspondências ou porque o shell não tem permissão para ver as correspondências), ele deixará o padrão sozinho e sudo
será chamado com o caractere argumentos ls
, -l
e /temp/sit/build/*
.
Como não há nenhum arquivo chamado /temp/sit/build/*
, o comando ls
reclama se você passar esse nome para ele. Lembre-se de que ls
não expande curingas, esse é o trabalho do shell.
Se você quiser que uma expansão com curinga ocorra em um diretório no qual não tenha permissão de leitura, a expansão deverá ocorrer em um shell iniciado por sudo
em vez de no shell que chama sudo
. sudo
não inicia automaticamente um shell, você precisa fazer isso explicitamente.
sudo sh -c 'ls -l /temp/sit/build/*'
Aqui, é claro, você pode fazer sudo ls -l /temp/sit/build/
, mas isso não é generalizado para outros padrões.