Warum sollte echo verwendet werden, bevor neue Software installiert wird?

5395
Pallav Bakshi

Ich bin neu in der Computerwelt. Bei der Installation von ROS Indigo muss ich im ersten Schritt den folgenden Code verwenden:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' 

Warum benutzen wir den echoBefehl sh -cin diesem Zusammenhang mit? Ich habe die Verwendung des Echo-Befehls auch in anderen Installationsprozessen gesehen.

Hinweis - Verwendung des Befehls sh, ROS Indigo Installation Wiki

25
Siehe auch: [Wenn ich Sudo mit Umleitung verwende, bekomme ich "Erlaubnis verweigert" - Ask Ubuntu] (http://askubuntu.com/q/230476/158442) muru vor 7 Jahren 0

2 Antworten auf die Frage

43

Normalerweise besteht die Funktion des echoBefehls darin, eine Zeichenfolge (Text) auf der Konsole anzuzeigen. Diesmal >wird jedoch nach dem echoBefehl ein Zeichen hinzugefügt, das die Ausgabe in eine Textdatei umleitet /etc/apt/sources.list.d/ros-latest.list.

Im Grunde schreibt dieser ganze Befehl ein Stück Text in eine Textdatei. Nun kommt der knifflige Teil:

Die in die Datei geschriebene Zeichenfolge kann für jeden Computer unterschiedlich sein. Das Teil $(lsb_release -sc)wird aufgelöst (in etwas anderes geändert), wenn der echoBefehl ausgeführt wird.

Sie können /etc/apt/sources.list.d/ros-latest.listvor und nach dem Befehl in einem Texteditor öffnen, um die Änderung selbst zu sehen. (Die Datei existiert möglicherweise vor diesem Befehl nicht.)

Tatsächlich überschreibt `>` die Textdatei, `>>` wird an das Ende angehängt. dirkt vor 7 Jahren 19
@dirkt Danke. Mein Fehler! ;) Das ist die Folge des Lernens mehrerer Skriptsprachen. Das widersprüchliche Verhalten verfolgt dich schließlich. Auch unter DOS wird> überschrieben. vor 7 Jahren 3
`echo` schreibt in die Standardausgabe, nicht in die Konsole. Michael Hampton vor 7 Jahren 10
"Wenn nicht umgeleitet, ist die Standardausgabe das Textterminal, das das Programm initiiert hat." Also, ja, "echo" schreibt auf die Konsole. vor 7 Jahren 4
2
Ralph

Paketverwaltung und Software-Repositorys

Debian-basierte Linux-Distributionen sind auf Repositorys (Datenbanken von Anwendungsinstallationspaketen und Upgrade-Paketen) angewiesen, um die Betriebssysteme auf dem neuesten Stand zu halten und neue Softwarepakete einfach abzurufen und zu installieren. Der Speicherort dieser Repositorys wird in gespeichert /etc/apt/sources.list, jedoch können zusätzliche Quellen, die normalerweise für bestimmte Anwendungen eindeutig sind, im /etc/apt/sources.list.dVerzeichnis gespeichert werden .

Wenn der Befehl zum Aktualisieren des Paketindex apt-get updateausgeführt wird, prüft Ihr Betriebssystem anhand dieser Paket-Repositorys nach verfügbaren Paketen und registriert die verfügbaren Softwares als für Ihr Betriebssystem verfügbar, die Sie mit dem herkömmlichen apt-get install <package>Befehl installieren können .

Ein Beispiel für eine dieser Softwarequellen ist:

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted 

Für diese Quellen ist es wichtig, auf bestimmte Versionen von Linux-Distributionen zu verweisen. Ein Beispiel ist trusty, der Codename für Ubuntu 14.04. Sie können Ihr Betriebssystem (auf Debian-Basis) nach vollständigen Details mit lsb_release -aoder abkürzen, lsb_release -scdie Kurzbezeichnung und Codename bedeuten .

In Ihrer Frage, der Teil $(lsb_release -sc)interpretiert und das Ergebnis von Ihrem Betriebssystem wird gedruckt in den benutzerdefinierten Quelldatei ros-latest.list, die der Befehl bei der Ausführung schaffen.


Befehlssprachen-Interpreter

Der shBefehl ist die Bourne-Shell . Dies ist eine unter mehreren Schalen, wird aber als der alte Standard betrachtet und im Allgemeinen kann man sicher sein, dass es existiert. Es ist auch üblich, bashin vielen Shell-Skripten zu sehen. Diese Deklaration gibt die zu verwendende Shell an, da unterschiedliche Shells unterschiedliche Syntax verwenden.

In Bezug auf die -cFlagge man bash:

Wenn die Option -c vorhanden ist, werden Befehle aus string gelesen. Wenn nach der Zeichenfolge Argumente vorhanden sind, werden diese den Positionsparametern zugewiesen, beginnend mit $ 0.

Alles innerhalb von ''wird als Zeichenfolge gelesen. Sie müssen nicht herausfinden, wie Sie verschiedene Anführungszeichen umgehen oder sich Sorgen machen müssen, dass die Shell etwas falsch interpretiert.


tl; dr

Der Befehl wird deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainin eine benutzerdefinierte Quelldatei gedruckt und $(lsb_release -sc)durch den interpretierten Wert ersetzt.