Como um script / programa é executado no unix?

3

Eu tenho uma dúvida sobre o padrão de execução de um script unix.

Por exemplo, um script contendo linhas:

command B
function C()
{
Myscript   // Myscript is a script 
command  D
}
command E

e suponha que se Myscript demorar muito para ser executado (digamos, 5 minutos), então o próximo comando ( command D ) será executado ou aguardar que Myscript seja concluído.

    
por munish 11.03.2012 / 19:57

2 respostas

16

No caso do seu script específico, nem Myscript nem command D será executado. Você definiu uma função C , mas não está chamando.

A ordem de execução é:

  1. command B é executado até a conclusão.
  2. command E é executado até a conclusão.

Se você chamasse C , ele executaria Myscript até a conclusão e, em seguida, executaria command D na conclusão.

Tudo o que você invoca em um script de shell é executado na ordem em que é visto e é executado até a conclusão. Se você precisar executar algo em paralelo com outra coisa, deverá usar o controle de tarefa (confira como o caractere% am_and & é usado para colocar tarefas em segundo plano). Um exemplo rápido:

A
B

Executa A até terminar, depois executa B até terminar. O script termina.

A &
B

Executa A no plano de fundo e, em seguida, executa B em primeiro plano. O script de shell termina quando B foi concluído. A ainda pode estar em execução.

A &
B &

Executa A no segundo plano e, em seguida (sem esperar que A seja concluído), executa B no segundo plano. O script termina imediatamente.

A &
B &
wait

Executa A no segundo plano e, em seguida (sem esperar que A seja concluído), executa B no segundo plano. O script aguarda que A e B sejam concluídos antes de sair.

    
por 11.03.2012 / 20:33
2

Há uma exceção que será detalhada mais tarde, mas esses comandos são executados pelo mesmo shell (mesmo se Myscript abrir um novo shell, e command D possuirá exatamente o mesmo shell "mãe" que os executa ). Como os shells * NIX não suportam paralelização, Myscript tem que interromper sua execução (com qualquer código de saída) para permitir que o controle receba command D .

A exceção é o caso em que você está desanexando Myscript , com um sinal NOHUP ou escrevendo & behind Myscript . Isso colocará o script em segundo plano.

Estude o seguinte snippet de código:

openssl enc -e bf -in verybigfile -out outputfile -k thisismykey &; # this is a long operation because of the size of the very big file
echo 'hi!' # this will be written during the encrypting operation

Espero que isso seja quase auto-explicativo agora.

A resposta de Alexios contém um ótimo ponto: você não chama a função, então ela nunca será executada.

    
por 11.03.2012 / 20:38