Eu sou novo no mundo da computação. Ao instalar o ROS Indigo, a primeira etapa indica que eu use o seguinte 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 que usamos o echo
comando junto sh -c
neste contexto? Eu já vi o uso do comando echo em outros processos de instalação.
Respostas:
Normalmente, a função do
echo
comando é exibir uma string (parte do texto) no console. Mas desta vez, um>
caractere é adicionado após oecho
comando, redirecionando sua saída para um arquivo de texto/etc/apt/sources.list.d/ros-latest.list
,.Então, basicamente, esse comando inteiro grava um pedaço de texto em um arquivo de texto. Agora, aqui vem a parte complicada:
A sequência gravada no arquivo pode ser diferente para cada computador. A peça
$(lsb_release -sc)
é resolvida (alterada para outra coisa) quando oecho
comando é executado.Você pode abrir
/etc/apt/sources.list.d/ros-latest.list
em um editor de texto antes e depois do comando para ver a alteração por si mesmo. (O arquivo pode não existir antes deste comando.)fonte
>
substitui o arquivo de texto e>>
anexa ao final.echo
grava na saída padrão, não no console.echo
escreve no console.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.d
diretórioQuando 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 oapt-get install <package>
comando tradicional .Um exemplo de uma dessas fontes de software é:
É 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 -a
ou olsb_release -sc
que 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
sh
comando é 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 verbash
em muitos scripts de shell. Essa declaração está especificando o shell a ser usado, pois diferentes shells usam sintaxe diferente.No que diz respeito à
-c
bandeira, citandoman bash
: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) main
em um arquivo de origem personalizado, substituindo$(lsb_release -sc)
pelo valor interpretado.fonte