Shebang line para “run with $ SHELL”

3

Estou procurando o que colocar na "linha shebang" de my_zsh_script.sh que teria o mesmo efeito, portável , como

$SHELL my_zsh_script.sh

IOW, estou procurando o equivalente válido de

#!$SHELL

ou

#!/usr/bin/env $SHELL    

(Em alguns sistemas, meu valor para $SHELL é uma versão de zsh que, em algumas circunstâncias, difere do que #!/usr/bin/env zsh resolve para.)

Suponho que sempre posso organizar my_zsh_script.sh personalizado, com a linha direita da shebang codificada, para cada host em que eu queira executá-lo. Espero evitar este cenário.

    
por kjo 13.11.2015 / 22:39

2 respostas

1
#!/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.

    
por 13.11.2015 / 23:00
1

O seguinte verifica se alguma variável de ambiente especial está definida para algum valor não nulo. Se não estiver, o script será executado novamente usando $SHELL , mas desta vez em um ambiente em que a variável especial esteja definida. Depois que a variável especial é definida, o script é executado conforme o pretendido.

#!/bin/sh

if [ -z "$__run_with_zsh" ]; then
    __run_with_zsh=1 exec "$SHELL" "$0" "$@"
fi

# Rest of script here
    
por 21.11.2015 / 20:51