altera um script bash enquanto está em execução [duplicado]

1

Eu tenho um script test

#! /bin/bash

sleep 60
echo hello

Eu o executei definindo-o como executável e ./test , e enquanto estava executando o comando sleep, eu o alterei para

#! /bin/bash

sleep 60
echo hello!!

A saída é hello!! . Eu me pergunto por que não hello ?

Como posso gerar hello , independentemente da alteração posterior?

    
por Tim 27.11.2014 / 01:30

1 resposta

3

Esta é a solução que funcionará para o seu caso.

Divida seu script em funções e cada vez que uma função for chamada source de um arquivo separado. Em seguida, você pode editar os arquivos a qualquer momento e o script em execução captará as alterações na próxima vez que for originado.

foo() {
  source foo.sh
}
foo

Teste

Eu criei dois scripts, digamos callee.sh e called.sh como abaixo.

#The contents of callee.sh script is as below. 
callee.sh

foo() {
  source called.sh
}
foo

#The contents of called.sh script is as below. 
called.sh

#! /bin/bash

sleep 60
echo hello

Agora, executo callee.sh , que por sua vez chama meu script called.sh . Basicamente, called.sh é o script que estaremos mudando dinamicamente.

Agora, quando callee.sh está sendo executado, eu abro outro shell e altero o conteúdo como

#! /bin/bash

    sleep 60
    echo hello
    echo "I added more contents here"

Agora, no primeiro shell a partir do qual chamei o script callee.sh depois que o sleep acabou, a saída que obtive é

hello

Como você pode ver, eu não obtive o I added more contents here na minha saída, que é o resultado final desejado.

Referências

link

    
por 27.11.2014 / 01:42

Tags