Como impedir que o shell script seja chamado em outro lugar que não seja a pasta em que está?

2

Eu gostaria de interromper meu script de shell se o usuário não for atualmente o diretório do shell script. Por exemplo, eu estou na pasta ~/ e chamo o script de shell ~/shell/script.sh , o script de shell deve imprimir You are not allowed to call this shell script from another folder other than its directory . Mas se eu estiver na pasta ~/shell e chamar ./script.sh do que a execução é permitida.

Why do you care what the $PWD is? You can change directories in the script if it matters: cd "$(dirname "$0")"

É um script agressivo / perigoso muito local, portanto, gostaria que o usuário estivesse presente na pasta, prestando mais atenção nele quando estiver executando o script.

Perguntas relacionadas:

  1. Verifique se o bash script foi invocado a partir de um shell ou outro script / aplicativo
  2. Executável lauches if chamado diretamente do terminal, mas não funciona quando chamado pelo shell script
por user 06.08.2017 / 14:53

2 respostas

1

Você pode obter o caminho completo para o seu script de execução usando realpath para resolver o diretório atual implícito ( man realpath para detalhes, a opção -P pode ser útil):

mydir=$(dirname $(realpath $0))
[[ $PWD != $mydir ]] && { echo "Not in the right directory!"; exit 1; }
echo "OK, proceed..."
    
por 06.08.2017 / 15:23
0

Obrigado @grawity, eu escrevi isto:

# Call the main function, as when running from the command line the '$0' variable is 
# not empty.
#
# Importing functions from a shell script
# https://stackoverflow.com/questions/12815774/importing-functions-from-a-shell-script
if ! [[ -z "$0" ]]
then
    # Reliable way for a bash script to get the full path to itself?
    # http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get
    pushd 'dirname $0' > /dev/null
    SCRIPT_FOLDER_PATH='pwd'
    popd > /dev/null

    if[[ "$SCRIPT_FOLDER_PATH" == "$(pwd)" || "$SCRIPT_FOLDER_PATH" == "$(dirname "$0")" ]]
    then
        main "$@"
    else
        printf "You cannot run this from the folder: \n'$(pwd)'\n"
        printf "\nPlease, run this script from its folder on: \n'$SCRIPT_FOLDER_PATH'\n"
    fi
fi
    
por 06.08.2017 / 15:05