Assumindo que você está executando o bash, coloque o seguinte código próximo ao início do script que você quer que seja originado, mas não executado:
if [ "${BASH_SOURCE[0]}" -ef "$0" ]
then
echo "Hey, you should source this script, not execute it!"
exit 1
fi
No bash, ${BASH_SOURCE[0]}
conterá o nome do arquivo atual que o shell está lendo, independentemente de estar sendo originado ou executado.
Por contraste, $0
é o nome do arquivo atual que está sendo executado.
-ef
testa se esses dois arquivos são o mesmo arquivo. Se estiverem, alertamos o usuário e saímos.
Nem -ef
nem BASH_SOURCE
são POSIX. Enquanto -ef
é suportado por ksh, yash, zsh e Dash, BASH_SOURCE
requer bash. Em zsh
, no entanto, ${BASH_SOURCE[0]}
pode ser substituído por ${(%):-%N}
.