Gerenciamento de Pacotes e Repositórios de Software
As distribuições Linux baseadas no Debian dependem de repositórios (bancos de dados de pacotes de instalação de aplicativos e pacotes de atualização) para manter os sistemas operacionais atualizados e também para buscar e instalar facilmente novos pacotes de software. A localização desses repositórios é armazenada /etc/apt/sources.list, no entanto, fontes adicionais, geralmente exclusivas para aplicativos específicos, podem ser armazenadas no /etc/apt/sources.list.ddiretório
Quando o comando package index update apt-get updateé executado, seu sistema operacional verifica com esses repositórios de pacotes os pacotes disponíveis e registra os softwares disponíveis como disponíveis no sistema operacional, que você pode instalar usando o apt-get install <package>comando tradicional .
Um exemplo de uma dessas fontes de software é:
deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted
É importante que essas fontes façam referência a versões específicas de distribuições linux. Um exemplo confiável é o codinome do Ubuntu 14.04. Você pode consultar seu sistema operacional (baseado em debian) para obter detalhes completos com lsb_release -aou o lsb_release -scque significa abreviado e codinome .
Na sua pergunta, a peça $(lsb_release -sc)é interpretada e o resultado do seu sistema operacional é impresso no arquivo de origem personalizado ros-latest.list, que o comando criará na execução.
Intérprete de linguagem de comando
O shcomando é o shell bourne . Essa é uma, dentre várias conchas, mas é considerada o padrão antigo e, geralmente, uma que você pode ter certeza de que existe. Também é comum ver bashem muitos scripts de shell. Essa declaração está especificando o shell a ser usado, pois diferentes shells usam sintaxe diferente.
No que diz respeito à -cbandeira, citando man bash:
Se a opção -c estiver presente, os comandos serão lidos da sequência. Se houver argumentos após a sequência, eles serão atribuídos aos parâmetros posicionais, começando com $ 0.
Tudo dentro do ''é lido como uma string, você não precisa descobrir como escapar de várias aspas ou se preocupar com o shell interpretando algo da maneira errada.
tl; dr
O comando imprime deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainem um arquivo de origem personalizado, substituindo $(lsb_release -sc)pelo valor interpretado.