Powłoka, która dokonuje rozwinięcia *znaku wieloznacznego, jest powłoką, w której ją wpisujesz. Jeśli powłoka ma uprawnienia do odczytu listy plików w katalogu, a następnie rozszerza /temp/sit/build/*się /temp/sit/build/filei biegnie sudoz argumentami ls, -li /temp/sit/build/file. Jeśli powłoka nie jest w stanie znaleźć żadnego meczu dla /temp/sit/build/*(czy to dlatego, że nie istnieją żadne mecze, albo dlatego, że powłoka nie ma uprawnień do oglądania meczów), a następnie pozostawia wzór sam, a sudonazywa się z argumentami ls, -li /temp/sit/build/*.
Ponieważ nie ma wywołanego pliku /temp/sit/build/*, lspolecenie narzeka, jeśli podasz mu tę nazwę. Pamiętaj, że lsto nie rozwija symboli wieloznacznych, to zadanie powłoki.
Jeśli chcesz, aby interpretacja symboli wieloznacznych miała miejsce w katalogu, w którym nie masz uprawnień do odczytu, wówczas ekspansja musi nastąpić w powłoce, która została uruchomiona, sudozamiast w powłoce, która wywołuje sudo. sudonie uruchamia automatycznie powłoki, musisz to zrobić jawnie.
sudo sh -c 'ls -l /temp/sit/build/*'
Tutaj możesz oczywiście sudo ls -l /temp/sit/build/zamiast tego zrobić , ale to nie uogólnia na inne wzorce.