#!/bin/sh
my_script(){
{ cat; cat <&3; }>"$0"
} <<SHEBANG 3<<\SCRIPT
#!${SHELL}
SHEBANG
#now all the rest of your script
#goes in here
SCRIPT
my_script
a maioria dos shells colocará todo o conteúdo do here-documents em arquivos temporários seguros automaticamente. aqueles que não usam pipes, e esses buffers são geralmente mais do que suficientes para acomodar gravações de shell script, mas eles não têm certeza, é claro.
e funções são strings literais armazenadas na memória do shell. fazer o acima só deve ser necessário a única vez, e depois o seu script será interpretado pelo que estava em $SHELL
no momento em que você o executou.