Предположим, что Вы запускаете с /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
По определению относительный путь изменяется при изменении текущего каталога.
Проблема - Вы, используют относительные пути, но Вы изменяете каталоги посреди сценария. Если Вы мысленно прослеживаете через шаги:
# 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
(-x
), который отображает каждую команду, прежде чем она будет выполнена, и errexit
(-e
), который выходит, если какая-либо команда возвращает ошибку.
#!/bin/bash -xe
cd ./release/
if [ ! -d "$1" ]; then
mkdir -p "$1"
fi
cp -rf ./html "$1"