Die Shell, die die Erweiterung des *
Platzhalters vornimmt, ist die Shell, in die Sie den Platzhalter eingeben. Wenn die Shell die Genehmigung hat die Liste der Dateien im Verzeichnis zu lesen, dann dehnt sie sich /temp/sit/build/*
auf /temp/sit/build/file
und läuft sudo
mit den Argumenten ls
, -l
und /temp/sit/build/file
. Wenn die Shell nicht in der Lage für jedes Spiel zu finden /temp/sit/build/*
(ob es ist , weil es keine Übereinstimmungen gibt, oder weil die Shell keine Genehmigung , die Spiele zu sehen , hat), dann läßt sie das Muster allein, und sudo
wird mit den Argumenten aufgerufen ls
, -l
und /temp/sit/build/*
.
Da keine Datei aufgerufen wird /temp/sit/build/*
, ls
beschwert sich der Befehl, wenn Sie diesen Namen übergeben. Denken Sie daran, dass ls
Platzhalter nicht erweitert werden, das ist die Aufgabe der Shell.
Wenn die Platzhaltererweiterung in einem Verzeichnis erfolgen soll, für das Sie keine Leseberechtigung haben, muss die Erweiterung in einer Shell erfolgen, die von sudo
anstelle der aufgerufenen Shell gestartet wird sudo
. sudo
startet eine Shell nicht automatisch, Sie müssen dies explizit tun.
sudo sh -c 'ls -l /temp/sit/build/*'
Hier können Sie das natürlich auch tun sudo ls -l /temp/sit/build/
, aber das verallgemeinert sich nicht auf andere Muster.