Wenn ich einen Befehl ausführe.
sudo some-command && some-other-command
Wird der zweite Befehl ebenfalls mit sudo
Vorrang ausgeführt?
TL; DR: NEIN
Der erste Befehl lautet
sudo some-command
Der zweite Befehl lautet
some-other-command
Der Befehl sudo
übernimmt den folgenden Befehl und führt ihn mit erhöhten Rechten aus. Das &&
gehört jedoch nicht zu einem Befehl und wird von der Shell interpretiert, bevor der erste Befehl ausgeführt wird. Er weist bash an, zuerst den ersten Befehl und bei Erfolg den zweiten Befehl auszuführen.
Also die sudo
wissen nichts über die && some-other command
. Wenn der Prozess mit erhöhten Rechten beendet wird, nimmt bash seinen Rückgabewert und führt dann den anderen Befehl aus, der wiederum den ersten nicht kennt.
Dies kann leicht demonstriert werden:
$ sudo whoami && whoami
root
username
Um das zu erreichen, was Sie wollen, können Sie eine erhöhte Bash starten und beide Befehle ausführen lassen:
$ sudo bash -c 'whoami && whoami'
root
root
Beide Befehle werden nun als root ausgeführt, da der gesamte oben beschriebene Prozess in einem erhöhten Prozess ausgeführt wird, dh die mit diesem Befehl gestartete Bash-Sitzung wird sofort nach Beendigung beendet. Trotzdem whoami
wissen die beiden nichts voneinander.
Dies ist nicht zweckdienlich, aber für diese Demonstration ist es einfacher, dies einfach zu tun
sudo some-command && sudo some-other-command
whoami
Beispiel.Einige Beispiele dafür sind:
oder wenn Sie Befehle zum Verschachteln wünschen, können Sie sogar Folgendes tun:
quelle
$ sudo -s -- whoami && whoami
gibtroot
username
sudo -s -- "whoami && whoami"
scheint Befehl nicht gefunden zu geben, mehr oder weniger das gleiche wie Befehl"whoami && whoami"
. Wie benutze ich diese Konstruktion mit &&? Ich sehe, dassudo -s cd ..
gibt keinen Fehler im Gegensatz zusudo cd ..
.sudo bash <<"EOF"
! Vielen Dank! :-)Nein, Sie müssen entweder zweimal sudo schreiben oder so etwas tun
quelle
&&
bedeutet, dass der rechtsseitige (zweite) Befehl nur ausgeführt wird, wenn der nichtsseitige (erste) Befehl erfolgreich ist, dh der Beendigungscode$?
lautet0
.Die beiden Befehle unterscheiden sich voneinander und werden in ihren eigenen Umgebungen ausgeführt, sodass der zweite Befehl nicht mit
sudo
Berechtigungen ausgeführt wird.Dies wird Ihnen klar machen:
quelle
NEIN, und das Folgende wurde einmal sehr häufig mit Makros beschrieben.
Fast jeder hätte das mindestens einmal tun sollen
Somit ist es eine großartige "Mickey Mouse" Interviewfrage.
Dies ist so einfach zu testen, dass die Frage möglicherweise auf eine stat-padding-Übung zurückzuführen ist.
quelle
Auf der Kommandozeile, wenn Sie sehen
Die typische Absicht ist, den Befehl, der auf && folgt, nur dann auszuführen, wenn der erste Befehl erfolgreich ist.
Läuft der andere Befehl auch als sudo?
Absolut nein, dies entspricht nur dem Schreiben von zwei aufeinanderfolgenden Befehlen. && verleiht einem Befehl kein zusätzliches Privileg. Es ist nur ein Trenner .
Um dies zu beweisen, nehmen wir ein Beispiel.
Ich habe zwei Dateien fileA und fileB erstellt. Jetzt führe ich den Befehl aus
Ich ändere den Benutzer- und Gruppeneigentümer dieser Dateien in Benutzer- und Gruppennamentest. Jetzt sollte der erste Befehl ausgeführt werden, während der andere ausgeführt wird.
Die Ausgabe ist:
Daher wurde der Befehl nicht ausgeführt, da er benötigt wird,
sudo
und obwohl wir daraus schließen können, dass && kein Ersatz für den zweiten istsudo
quelle