web-dev-qa-db-fra.com

Pourquoi utiliser echo avant installer un nouveau logiciel?

Je suis nouveau dans le monde informatique. Lors de l'installation de ROS Indigo, la première étape m'oblige à utiliser le code suivant:

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

Pourquoi utilisons-nous la commande echo avec sh -c dans ce contexte? J'ai également constaté l'utilisation de la commande echo dans d'autres processus d'installation.

Remarque - Utilisation de la commande sh , Wiki d'installation de ROS Indigo

25
Pallav Bakshi

Normalement, la fonction echo a pour fonction d’afficher une chaîne de caractères sur la console. Mais cette fois, un caractère > est ajouté après la commande echo, ce qui redirige sa sortie vers un fichier texte, /etc/apt/sources.list.d/ros-latest.list.

Donc, fondamentalement, toute cette commande écrit un morceau de texte dans un fichier texte. Maintenant, voici la partie la plus délicate:

La chaîne écrite dans le fichier peut être différente pour chaque ordinateur. La partie $(lsb_release -sc) est résolue (remplacée par autre chose) lors de l'exécution de la commande echo.

Vous pouvez ouvrir /etc/apt/sources.list.d/ros-latest.list dans un éditeur de texte avant et après la commande pour voir la modification par vous-même. (Le fichier peut ne pas exister avant cette commande.)

43
user477799

Gestion des packages et référentiels logiciels

Les distributions Linux basées sur Debian s'appuient sur des référentiels (bases de données des packages d'installation d'application et de mise à niveau) pour maintenir les systèmes d'exploitation à jour, ainsi que pour récupérer et installer facilement les nouveaux packages logiciels. L'emplacement de ces référentiels est stocké dans /etc/apt/sources.list; toutefois, des sources supplémentaires, généralement uniques à des applications spécifiques, peuvent être stockées dans le répertoire /etc/apt/sources.list.d.

Lorsque la commande de mise à jour de l'index de paquetage apt-get update est exécutée, votre système d'exploitation vérifie auprès de ces référentiels de paquetages les paquetages disponibles et enregistre les logiciels disponibles comme étant disponibles pour votre système d'exploitation. Vous pouvez ensuite les installer à l'aide de la commande traditionnelle apt-get install <package>.

Voici un exemple de l'une de ces sources de logiciels:

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

Il est important que ces sources fassent référence à des versions spécifiques de distributions Linux. Un exemple est trusty , qui est le nom de code pour Ubuntu 14.04. Vous pouvez interroger votre système d'exploitation (basé sur Debian) pour obtenir des détails complets avec lsb_release -a ou lsb_release -sc, ce qui signifie court et nom de code .

Dans votre question, la partie $(lsb_release -sc) est interprétée et le résultat de votre système d'exploitation est imprimé dans le fichier source personnalisé ros-latest.list dont le commande créera lors de l'exécution.


Interprète en langage de commande

La commande sh est le bourne Shell . C’est un modèle parmi plusieurs obus, mais il est considéré comme l’ancien standard et, en général, il en existe un. Il est également courant de voir bash dans de nombreux scripts Shell. Cette déclaration spécifie que le shell à utiliser car différents shells utilisent une syntaxe différente.

En ce qui concerne le drapeau -c, citant man bash:

Si l'option -c est présente, les commandes sont lues à partir de chaîne. S'il existe des arguments après la chaîne, ils sont affectés aux paramètres de position, en commençant par $ 0.

Tout ce qui se trouve dans le '' est lu comme une chaîne, vous n'avez pas besoin de savoir comment échapper à plusieurs guillemets ni de vous inquiéter du fait que le shell interprète quelque chose de manière erronée.


tl; dr

La commande imprime deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main dans un fichier source personnalisé, en remplaçant $(lsb_release -sc) par la valeur interprétée.

2
Ralph