
為什麼我不能透過完整的相對路徑參數建立目錄?這是我嘗試的:
#!/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 ()
用 shell 選項xtrace
( ) 和( )替換了整個函數-x
,前者在運行之前顯示每個命令,後者在任何命令返回錯誤時退出。errexit
-e
#!/bin/bash -xe
cd ./release/
if [ ! -d "$1" ]; then
mkdir -p "$1"
fi
cp -rf ./html "$1"