it-swarm-ja.com

シェルスクリプトがそのフォルダ以外の場所で呼び出されるのをブロックするにはどうすればよいですか?

ユーザーが現在シェルスクリプトディレクトリにいない場合は、シェルスクリプトを停止したいと思います。たとえば、フォルダ_~/_にいて、シェルスクリプトを_~/Shell/script.sh_と呼ぶと、シェルスクリプトは_You are not allowed to call this Shell script from another folder other than its directory_を出力するはずです。しかし、私が_~/Shell_フォルダーにいて、_./script.sh_を呼び出すと、実行が許可されます。

なぜ_$PWD_が何であるかを気にするのですか?重要な場合は、スクリプト内のディレクトリを変更できます。cd "$(dirname "$0")"

これは非常にローカルな攻撃的/危険なスクリプトであるため、スクリプトの実行中は、ユーザーがフォルダーに存在し、より注意を払ってほしいと思います。


関連する質問:

  1. bashスクリプトがシェルまたは別のスクリプト/アプリケーションから呼び出されたかどうかを確認してください
  2. ターミナルから直接呼び出された場合は実行可能ファイルが起動しますが、シェルスクリプトから呼び出された場合は機能しません
2
user

realpathを使用して暗黙の現在のディレクトリを解決することにより、実行中のスクリプトへのフルパスを取得できます(man realpath詳細については、-Pオプションが役立つ場合があります):

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

@grawityに感謝します、私はこれを書きました:

# 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 "[email protected]"
    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
0
user