為什麼我不能透過完整的相對路徑參數建立目錄?

為什麼我不能透過完整的相對路徑參數建立目錄?

為什麼我不能透過完整的相對路徑參數建立目錄?這是我嘗試的:

#!/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/.您應該確保mkdircp出現在同一目錄中。


這是一個建議的替代方案。我run ()用 shell 選項xtrace( ) 和( )替換了整個函數-x,前者在運行之前顯示每個命令,後者在任何命令返回錯誤時退出。errexit-e

#!/bin/bash -xe

cd ./release/

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

相關內容