Soy nuevo en el mundo de la informática. Al instalar ROS Indigo, el primer paso me indica que use el siguiente código:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
¿Por qué usamos el echocomando junto con sh -cen este contexto? También he visto el uso del comando echo en otros procesos de instalación.
Nota - Uso del comando sh , Wiki de instalación de ROS Indigo

Respuestas:
Por lo general, la función del
echocomando es mostrar una cadena (texto) en la consola. Pero esta vez, una>se añade carácter después delechocomando, la reorientación de su salida a un archivo de texto,/etc/apt/sources.list.d/ros-latest.list.Básicamente, todo este comando escribe un fragmento de texto en un archivo de texto. Ahora, aquí viene la parte difícil:
La cadena escrita en el archivo puede ser diferente para cada computadora. La parte
$(lsb_release -sc)se resuelve (cambia a otra cosa) cuando seechoejecuta el comando.Puede abrir
/etc/apt/sources.list.d/ros-latest.listen un editor de texto antes y después del comando para ver el cambio por sí mismo. (Es posible que el archivo no exista antes de este comando).fuente
>sobrescribe el archivo de texto, se>>agrega al final.echoescribe en la salida estándar, no en la consola.echoescribe en la consola.Gestión de paquetes y repositorios de software
Las distribuciones de Linux basadas en Debian se basan en repositorios (bases de datos de paquetes de instalación de aplicaciones y paquetes de actualización) para mantener actualizados los sistemas operativos y también para buscar e instalar fácilmente nuevos paquetes de software. La ubicación de estos repositorios se almacena
/etc/apt/sources.list, sin embargo, se pueden almacenar en el/etc/apt/sources.list.ddirectorio fuentes adicionales, generalmente exclusivas de aplicaciones específicas .Cuando
apt-get updatese ejecuta el comando de actualización del índice del paquete , su sistema operativo verifica con estos repositorios de paquetes los paquetes disponibles y registra los softwares disponibles como disponibles para su sistema operativo que puede instalar con elapt-get install <package>comando tradicional .Un ejemplo de una de estas fuentes de software es:
Es importante que estas fuentes hagan referencia a versiones específicas de distribuciones de Linux. Un ejemplo es de confianza, que es el nombre en clave de Ubuntu 14.04. Puede consultar su sistema operativo (basado en Debian) para obtener detalles completos con
lsb_release -ao lolsb_release -scque significa abreviatura y nombre en clave .En su pregunta, la parte
$(lsb_release -sc)se interpreta y el resultado de su sistema operativo se imprime en el archivo fuente personalizado ros-latest.list que el comando creará al ejecutarse.Intérprete de lenguaje de comando
El
shcomando es el shell bourne . Este es uno, entre varios shells, pero se considera el antiguo estándar y, en general, uno puede estar seguro de que existe. También es común verbashen muchos scripts de shell. Esa declaración especifica el shell para usar, ya que los diferentes shells usan una sintaxis diferente.En cuanto a la
-cbandera, citandoman bash:Todo lo que está dentro
''se lee como una cadena, no necesitaría descubrir cómo escapar de varias comillas o preocuparse de que el intérprete interprete algo de manera incorrecta.tl; dr
El comando imprime
deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainen un archivo fuente personalizado, reemplazando$(lsb_release -sc)con el valor interpretado.fuente