Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O que significa o `&` no final do comando

O prof manda um & no final do comando e diz que é para rodar no background e não dar pau no terminal, mas não entendi muito bem o que isso quer dizer. Pq precisamos que isso rode em background? Pq vai dar travar o terminal sem o &?

O código em si é esse aqui, dentro do arquivo phpweb.pp

# execute 'apt-get update'
exec { 'apt-update':                    # exec resource named 'apt-update'
  command => '/usr/bin/apt-get update'  # command this resource will run
}

# install php7.2 package and mysql, é sempre bom ser específico na versão
package { [ 'php7.2' , 'php7.2-mysql']: # isso por si só já instala esses dois pacotes, o resto é boa prática
  require => Exec['apt-update'],        # require 'apt-update' before installing
  ensure => installed,
}

# comando para subir o php7, colocar ele para rodar de fato
exec { 'run-php7':
  require => Package['php7.2'],               # requer o php7 de package que já esteja instalado para executar
  command => '/usr/bin/php -S localhost:80 &'   # php -S vem da documentação do php mesmo, o localhost:80 é a porta em que colocamos a máquina virtual do php, dentro do Vagrantfile
}

É esse & bem na última linha mesmo

3 respostas
solução!

Victor,

Exatamente isso que você comentou, que sem o &, o comando irá travar a saída do terminal e você não terá a possibilidade de utilizar este terminal.

Você colocando o & , você joga o processo para background (segundo plano) e evita que o terminal fique inacessível para você executar outros comandos.

saida de comando executado no linux com duas abordagens diferentes, utilizando & e sem utilizar

Veja que no 1), eu não utilizo o &, ele trava o terminal e só consigo fazer uso, após a saída do comando como um todo.

Já no 2) eu executo o mesmo comando utilizando o & e jogo o processo pra background [1] 14199, e libero meu CLI pra executar demais comandos.

Veja que mesmo assim, ele vai "cuspindo" a saída do comando que executei porém sem travar o terminal.

Espero ter ajudado, bons estudos.

Boa! Entendi então, a ideia é agilizar o processo né? Daí o terminal vai executando um mais longo em background enquanto executa processos mais simples, certo? Eu não poderia rodar todos os comandos com esse &? Não é uma boa ideia isso?

Victor,

O uso do processo em background vai ficar mais ao seu critério mesmo.

Em comando que ele "cospe" coisas na tela, não faz muito sentido, pq ele vai "cuspir" na tela de qq jeito, como foi o exemplo que dei, e aí pode

atrapalhar seus comando no CLI . Vão existir cenários que você quer que o comando execute em primeiro plano.

Mas supondo que você execute um servidor web por exemplo, que você não precisaria ir acompanhando o que ele vai "cuspir" no terminal, faria mais

sentido você rodando em background, enquanto você realiza outras tarefas.

Com a prática você irá identificando quais cenários faz sentido ou não utilizar essa ferramenta.

O importante é ter ciência da sua existência em alguma situação em que precise.

Segue link com opções adicionais de processos em background:

https://linuxize.com/post/how-to-run-linux-commands-in-background/