为什么我不能通过完整的相对路径参数创建目录?这是我尝试的:
#!/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"