#!/bin/echo Run this script with: bash
if ! [ "$BASHOPTS" ]
then
echo Run this script as bash script.sh
exit 1
fi
... rest of script here ...
Isso impede a execução (útil) com ./script.sh , invocando o echo binário em vez de um interpretador de shell e imprimindo a mensagem na primeira linha, seguida pelo nome do script.
Se executado em um shell que não é do Bash, ou Bash no modo POSIX (como no sh ), a variável BASHOPTS quase certamente não será definida e o corpo do if será executado, imprimindo uma mensagem e sair com um erro.
Isso funciona em versões Bash de 4 séries quando usado como sh ; para versões anteriores, talvez if ! [ "$BASH" ] || ! [ "${BASH##*/}" = "bash" ] seja sua melhor aposta, que verifica se o caminho para o intérprete termina com /bash . Se o seu sh for não Bash, apenas a verificação de $BASH será suficiente.
Honestamente, acho que você está provavelmente resolvendo o problema errado, mas isso fará o que você pediu.