Como controlar o modo de execução de um script de shell?

1

Eu quero restringir os usuários que querem usar um script específico para seguir um formato específico de execução e imprimir uma mensagem de erro na tela caso eles não o sigam. Quero que os usuários executem meu script apenas no formato abaixo

$ bash script.sh

Se eles tentarem executar em outros formatos,

$ sh script.sh

$./script.sh

Eu quero imprimir uma mensagem de erro com instruções sobre como executar o script

    
por Girish Sunkara 11.05.2017 / 09:45

1 resposta

1

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

    
por 11.05.2017 / 10:05