Warum führt „sudo bash && cd desktop“ nicht per CD zum Desktop-Ordner?

Warum führt „sudo bash && cd desktop“ nicht per CD zum Desktop-Ordner?

Ich habe einen Ordner mit chmod 000Berechtigungen und vielen unterschiedlichen Inhalten. Ich gelange hinein, indem ich starte, indem ich bashausführe .sudosudo bash

Warum geht das nicht &&? Ich möchte cdmit einem Befehl wie diesem in das Verzeichnis gelangen:

sudo bash && cd desktop

Wenn ich dies ausführe, befinde ich mich immer noch im ~Standardverzeichnis.

Ich muss stattdessen dies ausführen

sudo bash
cd desktop

Außerdem ist der Desktop nicht der Ordner, sondern ein Unterordner von Desktop, aber das spielt keine Rolle. Es ist sowieso dasselbe.

Antwort1

Der Teil danach &&wird in der aktuellen Shell ausgeführt, es handelt sich nicht um ein an den Befehl übergebenes Argument, bashmit dem Sie ausführen sudo.

Sie könnten versucht sein, es zu versuchen

sudo bash -c 'cd desktop'

aber das funktioniert nicht, weil das bashnach beendet wird cd desktop.

Du kannst es versuchen:

sudo sh -c 'cd desktop && exec bash'

das „funktioniert“ (d. h. es platziert Sie in dem Verzeichnis desktopin einer Bash-Shell mit uid=0). Ich würde lieber die beiden separaten Befehle ausgeben als diesen einen Zeilenbefehl.

Antwort2

Es funktioniert, aber nicht so, wie Sie es erwarten. &&wartet, bis der Befehl abgeschlossen ist. Wenn das Ergebnis an diesem Punkt ist true, wird die nächste Anweisung ausgeführt. Wenn Sie also eingeben bash && cd desktop, wird Ihnen zuerst eine Bash-Shell angezeigt. Wenn Sie eingeben exit, kehren Sie zu der Shell zurück, in der Sie sich zuvor befunden haben, undDannDas Verzeichnis wird in den Desktop-Ordner geändert.

In Bezug auf die von mir beschriebene Funktionalität ist sudo belanglos. Ihr Anwendungsfall für sudo ist wahrscheinlich nicht die beste Vorgehensweise und Sie sollten andere Lösungen in Betracht ziehen.

verwandte Informationen