Propósito de '&& bash' em um comando (não a parte '&&', a parte 'bash')

0

Acabei de ver a lista de comandos abaixo em uma página da Web - eles instalam uma versão estática de ffmpeg no diretório ~/bin do usuário. Os comandos não fazem parte de um script, o usuário deve copiar e colar os comandos no shell. Eu não precisei nem usei os comandos, mas ...

Minha pergunta diz respeito ao primeiro comando: mkdir -p ~/bin && bash

Qual é o propósito de usar bash no comando? É claro que eu sei o que o && faz e presumivelmente o bash apenas inicia uma nova instância do bash mas por que seria necessário iniciar uma nova instância do bash? Ou bash , quando usado assim, tem algum outro propósito?

mkdir -p ~/bin && bash
wget -qO ~/ffmpeg.tar.gz http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
tar xf ~/ffmpeg.tar.gz && cd && rm -rf ffmpeg-*-64bit-static/{manpages,presets,readme.txt}
cp ~/ffmpeg-*-64bit-static/* ~/bin
chmod 700 ~/bin/{ffmpeg,ffprobe,ffmpeg-10bit,qt-faststart}
cd && rm -rf ffmpeg{.tar.gz,-*-64bit-static}
    
por mattst 02.07.2017 / 19:48

3 respostas

2

Alguns programas exigem que você faça login com o shell bash para funcionar corretamente, essa pode ser a razão pela qual & & o bash é usado.

O & & O operador só consegue executar o segundo comando se o comando anterior funcionou corretamente - mas você já sabia disso, então meu palpite é que o software que você está tentando instalar requer um shell bash e outros shells podem não funcionar corretamente com o programa dado. Espero que isso tenha ajudado.

    
por 02.07.2017 / 20:23
1

As instruções de instalação estão um pouco quebradas.

Se o código de shell publicado fosse um script de shell, a parte && bash teria sido essencialmente inútil, já que teria lançado um bash interativo e ficado lá até o usuário sair do shell com Control - D ou exit , depois retome a execução dos próximos comandos com o shell do usuário atual, seja o que for.

Mas, como você escreveu, espera-se que o usuário copie e cole o código. Nesse caso, o && bash está lançando condicionalmente bash se o mkdir for bem-sucedido e, em seguida, as linhas restantes serão executadas por esse intérprete. Até aí tudo bem.

O primeiro problema é o que acontece no caso (improvável) em que o comando mkdir falha. O interpretador bash é não executado mas todas as linhas restantes , assumindo que todo o bloco de comandos shell foi copiado / colado, será executado de qualquer maneira . Além disso, eles serão executados por qualquer shell que o usuário esteja executando, possivelmente um que não entenda a expansão das chaves. Também haverá erros com todos os comandos referentes ao diretório ~/bin ausente.

A segunda questão é que, mesmo no primeiro caso ( mkdir sucede), a sequência de comandos é falsa, uma vez que assume que o usuário está em seu diretório inicial quando os comandos são iniciados, mas é claro que isso não é necessariamente o caso.

    
por 02.07.2017 / 23:19
0

A menos que a pasta do diretório não exista antes de e sua criação falhar, um shell bash interativo é aberto, onde você pode trabalhar como quiser .... edite o arquivo, escreva e-mails para sua avó, e assim por diante. Assim que você sair desse shell, o script continua em execução, fazendo o wget, o tar e assim por diante.

Agora, isso é o que este script faz de forma ativa . Quer isso seja ou não algo sensato, não quero julgar ...

    
por 03.07.2017 / 11:18

Tags