A solução padrão é gravar a nova versão do script em um novo arquivo com um nome temporário no mesmo diretório que o destino. Uma vez que o script foi escrito, ele é renomeado no topo da versão antiga. Qualquer instância em execução ainda estará usando a versão antiga.
Se o script for chamado /usr/local/bin/script.sh
, o nome temporário poderá ser /usr/local/bin/.script.sh.XXXXXX
, em que XXXXXX será substituído por uma sequência gerada aleatoriamente.