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 echo
comando junto con sh -c
en 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
echo
comando es mostrar una cadena (texto) en la consola. Pero esta vez, una>
se añade carácter después delecho
comando, 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 seecho
ejecuta el comando.Puede abrir
/etc/apt/sources.list.d/ros-latest.list
en 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.echo
escribe en la salida estándar, no en la consola.echo
escribe 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.d
directorio fuentes adicionales, generalmente exclusivas de aplicaciones específicas .Cuando
apt-get update
se 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 -a
o lolsb_release -sc
que 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
sh
comando 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 verbash
en 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
-c
bandera, 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) main
en un archivo fuente personalizado, reemplazando$(lsb_release -sc)
con el valor interpretado.fuente