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

25

Eu sou novo no mundo da computação. Ao instalar o ROS Indigo, o primeiro passo me direciona a usar 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 comando echo junto com sh -c neste contexto? Eu vi o uso do comando echo em outros processos de instalação também.

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

    
por Pallav Bakshi 11.01.2017 / 07:03

2 respostas

43

Normalmente, a função do comando echo é exibir uma string (pedaço de texto) no console. Mas, desta vez, um caractere > é adicionado após o comando echo , redirecionando sua saída para um arquivo de texto, /etc/apt/sources.list.d/ros-latest.list .

Então, basicamente, todo esse comando escreve um pedaço de texto em um arquivo de texto. Agora vem a parte complicada:

A string gravada no arquivo pode ser diferente para cada computador. A parte $(lsb_release -sc) é resolvida (alterada para outra coisa) quando o comando echo é 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).

    
por 11.01.2017 / 07:11
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 novos pacotes de software com facilidade. A localização desses repositórios é armazenada em /etc/apt/sources.list , no entanto, fontes adicionais, geralmente exclusivas de aplicativos específicos, podem ser armazenadas no diretório /etc/apt/sources.list.d .

Quando o comando de atualização do índice de pacotes apt-get update é executado, o sistema operacional verifica com esses repositórios de pacotes os pacotes disponíveis e registra os softwares disponíveis como disponíveis para o sistema operacional, que você pode instalar usando o tradicional apt-get install <package> comando.

Um exemplo de uma dessas fontes de software é:

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted

É importante para essas fontes referenciar versões específicas de distribuições linux. Um exemplo é trusty , que é o codinome do Ubuntu 14.04. Você pode consultar seu sistema operacional (baseado no Debian) para obter detalhes completos com lsb_release -a ou lsb_release -sc , o que significa curto e codinome .

Na sua pergunta, a parte $(lsb_release -sc) é interpretada e o resultado do seu sistema operacional é impresso no arquivo de origem personalizado ros-latest.list que o comando irá criar após a execução.

Interpretador de linguagem de comando

O comando sh é o shell do bourne . Este é um entre vários shells, mas é considerado o padrão antigo e geralmente existe um que você pode ter certeza. Também é comum ver bash em muitos scripts de shell. Essa declaração está especificando o shell para usar como shells diferentes usam sintaxe diferente.

No que diz respeito à bandeira -c , citando man bash :

If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

Tudo dentro do '' é lido como uma string, você não precisaria 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.

    
por 11.01.2017 / 22:51