Ich bin neu in der Computerwelt. Bei der Installation von ROS Indigo werde ich im ersten Schritt aufgefordert, den folgenden Code zu 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 verwenden wir den echo
Befehl sh -c
in diesem Zusammenhang zusammen mit ? Ich habe die Verwendung des Befehls echo auch in anderen Installationsprozessen gesehen.
Hinweis - Verwendung des Befehls sh im ROS Indigo-Installations-Wiki
Antworten:
Normalerweise besteht die
echo
Befehlsfunktion darin, eine Zeichenfolge (Text) auf der Konsole anzuzeigen. Diesmal>
wird jedoch nach demecho
Befehl ein Zeichen hinzugefügt , das seine Ausgabe in eine Textdatei umleitet/etc/apt/sources.list.d/ros-latest.list
.Im Grunde schreibt dieser ganze Befehl einen Text in eine Textdatei. Nun kommt hier der schwierige 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 derecho
Befehl ausgeführt wird.Sie können
/etc/apt/sources.list.d/ros-latest.list
vor und nach dem Befehl in einem Texteditor öffnen , um die Änderung selbst zu sehen. (Die Datei existiert möglicherweise nicht vor diesem Befehl.)quelle
>
überschreibt die Textdatei,>>
hängt an das Ende.echo
Schreibt auf die Standardausgabe, nicht auf die Konsole.echo
schreibt an die Konsole.Paketverwaltung und Software-Repositorys
Debian-basierte Linux-Distributionen verlassen sich auf Repositorys (Datenbanken mit Anwendungsinstallationspaketen und Aktualisierungspaketen), um die Betriebssysteme auf dem neuesten Stand zu halten und neue Softwarepakete einfach abzurufen und zu installieren. Der Speicherort dieser Repositorys wird gespeichert
/etc/apt/sources.list
, es können jedoch zusätzliche Quellen, die normalerweise nur für bestimmte Anwendungen gelten, im/etc/apt/sources.list.d
Verzeichnis gespeichert werden .Wenn der Befehl zum Aktualisieren des Paketindex
apt-get update
ausgeführt wird, sucht Ihr Betriebssystem in diesen Paket-Repositorys nach verfügbaren Paketen und registriert die verfügbaren Softwares als verfügbar für Ihr Betriebssystem, das Sie mit dem herkömmlichenapt-get install <package>
Befehl installieren können .Ein Beispiel für eine dieser Softwarequellen ist:
Es ist wichtig, dass diese Quellen auf bestimmte Versionen von Linux-Distributionen verweisen. Ein vertrauenswürdiges Beispiel ist der Codename für Ubuntu 14.04. Sie können Ihr Betriebssystem (debian-basiert) nach vollständigen Details abfragen, mit
lsb_release -a
oderlsb_release -sc
was Kurz- und Codenamen bedeutet .In Ihrer Frage, der Teil
$(lsb_release -sc)
interpretiert und das Ergebnis von Ihrem Betriebssystem gedruckt in die benutzerdefinierten Quelldatei ros-latest.list , die der Befehl bei der Ausführung schaffen.Befehlssprachen-Interpreter
Der
sh
Befehl ist die Borowski-Shell . Dies ist eine von mehreren Shells, wird jedoch als der alte Standard angesehen, und im Allgemeinen kann man sicher sein, dass es einen gibt. Es ist auch üblich,bash
in vielen Shell-Skripten zu sehen. Diese Deklaration gibt die zu verwendende Shell an, da unterschiedliche Shells unterschiedliche Syntax verwenden.In Bezug auf die
-c
Flagge zitiertman bash
:Alles in der
''
Datei wird als Zeichenfolge gelesen. Sie müssen also nicht herausfinden, wie Sie verschiedenen Anführungszeichen entgehen können, oder sich Sorgen machen, dass die Shell etwas falsch interpretiert.tl; dr
Der Befehl wird
deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main
in eine benutzerdefinierte Quelldatei gedruckt und$(lsb_release -sc)
durch den interpretierten Wert ersetzt.quelle