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