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