Por que usar o eco antes de instalar um novo software?


25

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 echocomando junto sh -cneste contexto? Eu já vi o uso do comando echo em outros processos de instalação.

Nota - Uso do comando sh , Wiki de Instalação do ROS Indigo


Respostas:


43

Normalmente, a função do echocomando é exibir uma string (parte do texto) no console. Mas desta vez, um >caractere é adicionado após o echocomando, 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 o echocomando é executado.

Você pode abrir /etc/apt/sources.list.d/ros-latest.listem 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.)


19
Na verdade, >substitui o arquivo de texto e >>anexa ao final.
dirkt

3
@dirkt Obrigado. Minha culpa! ;) Essa é a consequência do aprendizado de várias linguagens de script. O comportamento conflitante acaba por assombrá-lo. Mesmo no DOS, sobrescreve.

10
echograva na saída padrão, não no console.
Michael Hampton

4
"A menos que redirecionado, a saída padrão é o terminal de texto que iniciou o programa." Então, sim, echoescreve no console.

2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.