programing

실행 중인 Bash 스크립트의 경로를 확인합니다.

easyjava 2023. 4. 14. 22:18
반응형

실행 중인 Bash 스크립트의 경로를 확인합니다.

Windows 명령어스크립트에서는 다음 명령을 사용하여 현재 실행 중인 스크립트의 디렉토리 경로를 확인할 수 있습니다.%~dp0. 예:

@echo Running from %~dp0

Bash 스크립트에서는 무엇이 동등합니까?

상대 경로(즉, Windows와 직접 동등한 것)의 경우%~dp0):

MY_PATH="$(dirname -- "${BASH_SOURCE[0]}")"
echo "$MY_PATH"

절대 정규화 경로의 경우:

MY_PATH="$(dirname -- "${BASH_SOURCE[0]}")"            # relative
MY_PATH="$(cd -- "$MY_PATH" && pwd)"    # absolutized and normalized
if [[ -z "$MY_PATH" ]] ; then
  # error; for some reason, the path is not accessible
  # to the script (e.g. permissions re-evaled after suid)
  exit 1  # fail
fi
echo "$MY_PATH"

bash 스크립트의 전체 경로를 입력한 경우$0그리고.dirname예:

#!/bin/bash
echo "$0"
dirname "$0"

출력 예:

$ /a/b/c/myScript.bash
/a/b/c/myScript.bash
/a/b/c

필요에 따라서, 의 결과를 추가합니다.$PWD변수와 상대 경로를 비교합니다.

편집: 공백 문자를 처리하기 위해 따옴표가 추가되었습니다.

C.U.S.에 관한 Stephane CHAZELAS에 의한 기고POSIX 쉘을 전제로 합니다.

prg=$0
if [ ! -e "$prg" ]; then
  case $prg in
    (*/*) exit 1;;
    (*) prg=$(command -v -- "$prg") || exit;;
  esac
fi
dir=$(
  cd -P -- "$(dirname -- "$prg")" && pwd -P
) || exit
prg=$dir/$(basename -- "$prg") || exit 

printf '%s\n' "$prg"
echo Running from $(dirname "$0")

블라드의 코드가 너무 많이 인용됐어요다음 항목이어야 합니다.

MY_PATH=`dirname "$0"`
MY_PATH=`( cd "$MY_PATH" && pwd )`

언급URL : https://stackoverflow.com/questions/630372/determine-the-path-of-the-executing-bash-script

반응형