Почему я не могу создать каталог полным аргументом относительного пути?

show_val() { echo "${!1}"; }
foo=bar
echo $(show_val foo)   # => bar
# works with arrays too
a=(zero one two)
echo $(show_val a[1])  # => one

Зарегистрированный в руководство удара здесь

-1
21.11.2012, 05:43
2 ответа

Предположим, что Вы запускаете с /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

По определению относительный путь изменяется при изменении текущего каталога.

6
28.01.2020, 05:06

Проблема - Вы, используют относительные пути, но Вы изменяете каталоги посреди сценария. Если Вы мысленно прослеживаете через шаги:

# 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"
2
28.01.2020, 05:06

Теги

Похожие вопросы