Normalmente la funzione di echo comando consiste nel visualizzare una stringa (pezzo di testo) sulla console. Ma questa volta, un > carattere viene aggiunto dopo il echo comando, reindirizzando il suo output a un file di testo, /etc/apt/sources.list.d/ros-latest.list .
Quindi, in sostanza, l'intero comando scrive una parte di testo in un file di testo. Ora arriva la parte difficile:
La stringa scritta nel file può essere diversa per ogni computer. La parte $(lsb_release -sc) viene risolto (cambiato in qualcos'altro) quando echo viene eseguito il comando.
Puoi aprire /etc/apt/sources.list.d/ros-latest.list in un editor di testo prima e dopo il comando per vedere tu stesso il cambiamento. (Il file potrebbe non esistere prima di questo comando.)
Gestione dei pacchetti e repository software
Le distribuzioni Linux basate su Debian si basano su repository (database di pacchetti di installazione di applicazioni e pacchetti di aggiornamento) per mantenere aggiornati i sistemi operativi e anche per recuperare e installare facilmente nuovi pacchetti software. La posizione di questi repository è memorizzata in /etc/apt/sources.list , tuttavia fonti aggiuntive, solitamente univoche per applicazioni specifiche, possono essere memorizzate nel /etc/apt/sources.list.d directory.
Quando il comando di aggiornamento dell'indice del pacchetto apt-get update viene eseguito, il tuo sistema operativo verifica con questi repository di pacchetti i pacchetti disponibili e registra i software disponibili come disponibili per il tuo sistema operativo che puoi continuare a installare usando il tradizionale apt-get install <package> comando.
Un esempio di una di queste fonti software è:
deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted
È importante che queste fonti facciano riferimento a versioni specifiche delle distribuzioni Linux. Un esempio è affidabile che è il nome in codice di Ubuntu 14.04. Puoi interrogare il tuo sistema operativo (basato su debian) per i dettagli completi con lsb_release -a o lsb_release -sc che significa breve e nome in codice .
Nella tua domanda, la parte $(lsb_release -sc) viene interpretato e il risultato del tuo sistema operativo viene stampato nel file sorgente personalizzato ros-latest.list che il comando creerà al momento dell'esecuzione.
Interprete del linguaggio dei comandi
Il sh comando è la bourne shell. Questo è uno, tra diversi gusci, ma è considerato il vecchio standard e generalmente uno di cui puoi essere certo che esiste. È anche comune vedere bash in molti script di shell. Quella dichiarazione specifica la shell da usare poiché shell diverse usano una sintassi diversa.
Per quanto riguarda il -c flag, citando man bash :
Se è presente l'opzione -c, i comandi vengono letti dalla stringa. Se ci sono argomenti dopo la stringa, vengono assegnati ai parametri posizionali, a partire da $0.
Tutto all'interno del '' viene letto come una stringa, non avrai bisogno di capire come evitare varie virgolette o preoccuparti che la shell interpreti qualcosa nel modo sbagliato.
tl;dr
Il comando stampa deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main in un file sorgente personalizzato, sostituendo $(lsb_release -sc) con il valore interpretato.