完全な相対パスパラメータを使用してディレクトリを生成できないのはなぜですか?これが私が試したことです:
#!/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 ()
シェルオプション()とコマンドがエラーを返したときに終了する()に置き換えました。xtrace
-x
errexit
-e
#!/bin/bash -xe
cd ./release/
if [ ! -d "$1" ]; then
mkdir -p "$1"
fi
cp -rf ./html "$1"