스크립트의 마지막 폴더 없이 현재 경로를 얻는 방법은 무엇입니까?

스크립트의 마지막 폴더 없이 현재 경로를 얻는 방법은 무엇입니까?

스크립트가 실행되는 폴더 자체를 제외하고 현재 경로를 변수에 저장하는 스크립트를 실행하고 싶습니다. 예:

/tmp/test/test2/test3/test.sh

path=$PWD
echo $path

하지만 /tmp/test/test2/test3sh 스크립트가 있는 폴더를 제외하고 싶습니다.

그래서 내가 원하는 결과는 다음과 같습니다. /tmp/test/test2

답변1

당신은 그것을 사용할 수 있습니다

dir=${PWD%/*}    # or:  dir=$( dirname "$PWD" )

또는

dir="$PWD/.."

또는

dir=".."

첫 번째 경우, PWD현재 작업 디렉터리를 포함하는 변수는 /마지막 디렉터리와 그 뒤의 모든 항목을 제거하여 상위 디렉터리에 대한 경로를 가져오는 데 사용됩니다.

두 번째 경우, PWD변수는 단순히 위의 디렉터리에 대한 경로를 만드는 데 사용됩니다 ...

세 번째 경우에는 현재 디렉터리에 대한 상대 경로를 사용하여 위 디렉터리를 참조하기만 하면 됩니다.

어떤 대안을 사용하는지는 경로를 사용하려는 대상에 따라 다릅니다.

예:

$ echo $PWD
/tmp/shell-sh.jAtMYgn0
$ dir=${PWD%/*}
$ echo "$dir"
/tmp
$ dir="$PWD/.."
$ echo "$dir"
/tmp/shell-sh.jAtMYgn0/..
$ dir=".."
$ echo "$dir"
..

답변2

다음 코드를 시도해 보세요.

dirname "$(pwd)"
  • dirname - 파일/디렉토리 경로에서 접미사 제거

답변3

존재하다 zsh:

dir=$PWD:h

와 마찬가지로 dirname의 끝에서 디렉터리 구성 요소를 제거합니다 $PWD. 이면 와 같게 됩니다 .$PWD/$dir/dirname

장점보다 하나 더

dir=$(dirname -- "$PWD")

$PWDdirname이 줄바꿈으로 끝나는 경우에도 여전히 작동합니다.

반드시 현재 디렉터리의 상위 디렉터리일 필요는 없습니다. 예를 들어, 과 가 심볼릭 링크 $PWD인 경우 현재 디렉터리의 상위 디렉터리는 이 아니라 이 됩니다 . 상위 디렉터리를 얻으려면 다음을 수행할 수 있습니다./tmp/tmp/var/tmp/var/

dir=$PWD/..
dir=$dir:P

또는:

dir=$PWD:P:h

( :P수정자는 $dir표준 경로를 생성합니다(모든 기호 링크 ...GNU와 같은 구성 요소를 확인합니다 readlink -f)).

또는 POSIX적으로:

dir=$(cd -P .. && pwd -P)

어쨌든, $PWD스크립트 내의 경로는 스크립트와 아무런 관련이 없다는 점에 유의하시기 바랍니다. 스크립트가 포함된 디렉토리의 상위 디렉토리를 원할 경우 해당 디렉토리 $0:P:h:hzsh.

답변4

현재 작업 디렉터리는 /home/dev/other입니다.

dir=$PWD

상위 디렉토리

parentdir="$(dirname "$dir")"`

관련 정보