전체 상대 경로 인수로 디렉터리를 만들 수 없는 이유는 무엇입니까?

전체 상대 경로 인수로 디렉터리를 만들 수 없는 이유는 무엇입니까?

전체 상대 경로 인수로 디렉터리를 만들 수 없는 이유는 무엇입니까? 내가 시도하는 것은 다음과 같습니다.

#!/bin/bash
args=("$@")
# Print the command and run it. Exit the script on failure.
run()
{
        if $VERBOSE; then
                echo "$@"
                "$@"
        else
                "$@" >& /dev/null
        fi
        result=$?
        if [ $result -ne 0 ]; then
                exit $result
        fi
}
                if [ ! -d ${args[0]} ]; then
                        run mkdir -p ${args[0]}
                fi

                run cd ./release/
                run cp -rf ./html/ ${args[0]}

하지만 나는 다음을 얻습니다:

mkdir -p ./bla/bla/cloud/
cd ./release/
cp -rf ./html/ ./bla/bla/cloud/
cp: cannot create directory `./bla/bla/cloud/': No such file or directory

그래서 다음과 같이 호출될 때 스크립트를 작동시키는 방법이 궁금합니다../script.sh ./bla/bla/bla/

답변1

에서 시작한다고 가정합니다 /some/dir.

mkdir -p ./bla/bla/cloud/          # create /some/dir/bla/bla/cloud
cd ./release/                      # cd /some/dir/release
cp -rf ./html/ ./bla/bla/cloud/    # copy to /some/dir/release/bla/bla/cloud

정의에 따르면 현재 디렉터리를 변경하면 상대 경로가 변경됩니다.

답변2

문제는 상대 경로를 사용하고 있지만 스크립트 중간에 디렉터리를 변경한다는 것입니다. 정신적으로 단계를 따라가면:

# command                     # relevant absolute path(s)
./script.sh ./bla/bla/bla/    # PWD/script.sh 
mkdir -p ./bla/bla/bla/       # PWD/bla/bla/bla/
cd ./release/                 # PWD/release
cp -rf ./html/ ./bla/bla/bla/ # PWD/release/html PWD/release/bla/bla/bla   

어떻게 생성했지만 PWD/bla/bla/bla/에 복사하려고 시도하는지 확인하세요 PWD/release/bla/bla/bla/. mkdir및 가 cp동일한 디렉토리에 발생하는지 확인해야 합니다 .


다음은 제안된 대안입니다. 전체 함수를 실행되기 전에 모든 명령을 표시하는 run ()셸 옵션 xtrace( )과 명령이 오류를 반환하면 종료되는 ( )로 대체했습니다.-xerrexit-e

#!/bin/bash -xe

cd ./release/

if [ ! -d "$1" ]; then
        mkdir -p "$1"
fi
cp -rf ./html "$1"

관련 정보