Os scripts geralmente começam com um shebang como #!/usr/bin/env bash
, que especifica o shell a ser usado para execução. O comportamento de execução quando o shebang não está presente parece depender do shell de chamada . De qualquer forma, o script é executado a partir de um "novo" shell que não conhece as variáveis e funções definidas no shell de chamada.
Como alternativa, os scripts também podem ser source
inseridos em um shell, o que, pelo que entendi, é equivalente a copiar e colar o conteúdo do script no shell atual. Se quaisquer funções ou variáveis forem definidas no script, elas permanecerão no shell de chamada após a "execução", o que pode não ser desejável.
Existe algo entre essas duas opções? É possível executar um script como um subshell do shell de chamada, de modo que tenhamos acesso a tudo definido no shell de chamada, mas não o modifiquemos (a menos que talvez com e tais comandos) export
?
Escrever (source myscript.sh)
parece estar fazendo o que procuro; esta é a maneira certa de fazer isso? Existe um shebang equivalente que produziria o mesmo comportamento chamando ./myscript.sh
em vez disso?