Como identifico a execução do script shell versus a execução do ponto

2

Estou escrevendo um script básico que precisa ser executado no processo atual para que seja útil.

Ou seja, quero ter certeza de que o script foi chamado com source script.sh ou . ./script.sh e não ./script.sh .

Para aqueles que não sabem a diferença, consulte: o que é a diferença? entre a execução de um script Bash e o seu sourcing?

Eu sei que posso fazer chmod u-x script.sh para que ele não possa ser executado sem o fornecimento, mas os usuários podem reconhecê-lo como um script e chmod em si. Eu gostaria de uma solução mais elegante se existir.

Existe uma maneira de o script reconhecer que ele não foi chamado com source ou . e sair com um erro?

    
por TheIronChef 09.04.2014 / 08:57

1 resposta

1

Se o seu script estiver sendo originado por bash , $0 será bash ou -bash :

[[ $0 =~ ^-?bash$ ]] && echo "Thank you for sourcing me"

Como alternativa, se você souber que seu script é chamado de script.sh , mas não se importa com a origem do shell, inverta o teste:

[ "X$(basename -- "$0")" != "Xscript.sh" ] && echo "Thank you for sourcing me"

(Note que como o acima é para shells gerais (POSIX), ele não usa [[ tests.)

Para obter mais informações sobre problemas relacionados, consulte StackOverflow .

    
por 09.04.2014 / 09:04