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 &