스크립트가 실행되는 폴더 자체를 제외하고 현재 경로를 변수에 저장하는 스크립트를 실행하고 싶습니다. 예:
/tmp/test/test2/test3/test.sh
path=$PWD
echo $path
하지만 /tmp/test/test2/test3
sh 스크립트가 있는 폴더를 제외하고 싶습니다.
그래서 내가 원하는 결과는 다음과 같습니다.
/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")
$PWD
dirname이 줄바꿈으로 끝나는 경우에도 여전히 작동합니다.
반드시 현재 디렉터리의 상위 디렉터리일 필요는 없습니다. 예를 들어, 과 가 심볼릭 링크 $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:h
는 zsh
.
답변4
현재 작업 디렉터리는 /home/dev/other입니다.
dir=$PWD
상위 디렉토리
parentdir="$(dirname "$dir")"`