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