为什么我不能通过完整的相对路径参数创建目录?

为什么我不能通过完整的相对路径参数创建目录?

为什么我不能通过完整的相对路径参数创建目录?这是我尝试的:

#!/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"

相关内容