Isso é conhecido como job control
em unix. O &
informa o shell para colocar o comando em segundo plano. Isso significa que ele continua executando o comando sys-snap.sh
, mas retorna ao seu shell para permitir que você continue fazendo comandos paralelos.
Você pode ver a lista de trabalhos atualmente em execução com o comando jobs
. Você pode retornar ao comando (trazer para o 'primeiro plano') com o uso do comando fg
. O que puxa o comando de volta para o estado onde você não vê nenhum prompt e você tem que emitir Ctrl - C para matar o processo. Você pode, no entanto, suspender (pausa) o processo, emitindo Ctrl - Z . Isso irá pausar sys-snap.sh
e retornar você ao seu prompt. Você pode então fazer um plano de fundo (como se tivesse emitido com &
) com o comando bg
, e ele retomar executando a partir do estado pausado < kbd> Ctrl - Z colocara.
Observe que você pode ter mais de um trabalho por vez (conforme mostrado por jobs
):
[1]- Running sys-snap.sh &
[2]+ Running another-script.sh &
Você pode colocar em segundo plano e em primeiro plano usando o número do trabalho, %1
será sys-snap.sh
e %2
será another-script.sh
. Se você usar fg
ou bg
sem argumentos, ele acionará o comando na tarefa marcada por +
na saída jobs
acima.
fg %1
colocará sys-snap.sh
de volta no primeiro plano, deixando another-script.sh
em segundo plano.
Você pode emitir a seqüência Ctrl - C para executar tarefas sem ter que forçá-las com o comando kill
, kill %1
enviará o equivalente a Ctrl - C para sys-snap.sh
.
Se você estiver usando o bash shell, o comando man bash
tem uma seção detalhada sob a seção intitulada 'JOB CONTROL' entrando em mais detalhes.
Quanto ao nome de sys-snap.sh
, sob nomes de arquivos unix são arbitrários (com algumas exceções, como arquivos do carregador dinâmico). Não há nenhum requisito para que eles tenham extensões de arquivo específicas para executá-los como um script de shell, invocar outros comandos como perl
ou php
etc. Ele é normalmente usado para fornecer clareza, que neste caso, é .sh
um script de shell usando o Bourne Shell /bin/sh
.
A parte funcional de sys-snap.sh
(quando você olha seu conteúdo com algo como o comando less
) é o Shebang . Na primeira linha, você provavelmente encontrará um dos seguintes:
#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash
ou similar. Em termos básicos, o comando após o #!
(como /bin/sh
) é executado e o conteúdo do restante do arquivo de script é alimentado com uma linha por vez. Observe que o arquivo também deve ser definido como executável com chmod
para que você possa executá-lo como um comando. Se as permissões não foram definidas, o shebang
não terá efeito, porque você obterá o erro:
bash: sys-snap.sh: command not found
ou se você o executou pelo caminho explícito ./sys-snap.sh
( .
que significa o diretório de trabalho atual) você obteria:
bash: ./sys-snap.sh: Permission denied
A outra alternativa é deixá-lo sem permissões de execução e solicitar explicitamente ao / bin / sh para executá-lo:
/bin/sh sys-snap.sh &