Je suis nouveau dans le monde informatique. Lors de l'installation de ROS Indigo, la première étape m'indique d'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 echo
commande avec sh -c
dans ce contexte? J'ai également vu l'utilisation de la commande echo dans d'autres processus d'installation.
Remarque - Utilisation de la commande sh , Wiki d'installation de ROS Indigo
Réponses:
Normalement, la fonction de la
echo
commande est d'afficher une chaîne (morceau de texte) sur la console. Mais cette fois -ci , un>
caractère est ajouté après laecho
commande, rediriger 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 délicate:
La chaîne écrite dans le fichier peut être différente pour chaque ordinateur. La partie
$(lsb_release -sc)
est résolue (changée en autre chose) lors de l'echo
exécution de la commande.Vous pouvez ouvrir
/etc/apt/sources.list.d/ros-latest.list
dans un éditeur de texte avant et après la commande pour voir le changement par vous-même. (Le fichier peut ne pas exister avant cette commande.)la source
>
remplace le fichier texte,>>
ajoute à la fin.echo
écrit sur la sortie standard, pas sur la console.echo
écrit sur la console.Gestion des packages et référentiels de logiciels
Les distributions Linux basées sur Debian s'appuient sur des référentiels (bases de données de packages d'installation d'applications et de packages de mise à niveau) pour maintenir les systèmes d'exploitation à jour et également pour récupérer et installer facilement de nouveaux packages logiciels. L'emplacement de ces référentiels est stocké dans
/etc/apt/sources.list
, cependant des sources supplémentaires, généralement uniques à des applications spécifiques, peuvent être stockées dans le/etc/apt/sources.list.d
répertoire.Lorsque la commande de mise à jour de l'index de package
apt-get update
est exécutée, votre système d'exploitation vérifie auprès de ces référentiels de packages les packages disponibles et enregistre les logiciels disponibles comme disponibles pour votre système d'exploitation que vous pouvez continuer à installer à l'aide de laapt-get install <package>
commande traditionnelle .Un exemple d'une de ces sources logicielles est:
Il est important que ces sources référencent des versions spécifiques des 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 des détails complets avec
lsb_release -a
oulsb_release -sc
ce qui signifie court et nom de code .Dans votre question, la pièce
$(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 que la commande créera lors de l'exécution.Interprète de langage de commande
La
sh
commande est le bourne shell . C'est un, parmi plusieurs coquilles, mais il est considéré comme l'ancien standard et généralement vous pouvez en être certain. Il est également courant de le voirbash
dans de nombreux scripts shell. Cette déclaration spécifie le shell à utiliser car différents shells utilisent une syntaxe différente.En ce qui concerne le
-c
drapeau, citantman bash
:Tout ce qui se trouve dans le
''
est lu comme une chaîne, vous n'aurez pas besoin de comprendre comment échapper aux différents guillemets ou vous inquiéter que le shell interprète quelque chose dans le mauvais sens.tl; dr
La commande s'imprime
deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main
dans un fichier source personnalisé, en la remplaçant$(lsb_release -sc)
par la valeur interprétée.la source