Minecraftワールドを自動的にリセットし、いくつかのカスタム機能を再コピーしようとしています...リセットは、単にワールドフォルダを削除することを意味します。カスタム関数を正しい場所にコピーすると、世界が再生成されたかどうかにかかわらず動作するはずです。
スクリプト全体は次のようになりますが、失敗した部分は次のようになります。
mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"
どちらの行も同様のメッセージをトリガします。
mkdir: invalid option -- ' '
Try 'mkdir --help' for more information.
ところで、引用した部分をそのまま反映してみると合うようです。
#!/bin/bash
if [ -d "/srv/$1/world" ]
then
read -r -p "Are you sure? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
then
world="/srv/$1/world"
world_nether="/srv/$1/world_nether"
world_the_end="/srv/$1/world_the_end"
docker container stop $1
rm -r $world
rm -r $world_nether
rm -r $world_the_end
mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"
docker container start $1
exit 0
else
exit 1
fi
else
echo "Copy failed. /srv/$1/world doesn't exist."
exit 1
fi
私はこれが一般的なことだと思う何十もの記事を読んでいますが、まだ答えが見つかりませんでした...どうすればいいですか?
ベストアンサー1
シェルは、引用された引数をオプションと引数ではなく単一の文字列として解釈します。オプションを引用しないで、各パラメータを個別に引用してください。
失敗します:
mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"
失敗しません:
mkdir -p "$world/datapacks"
cp -R "/srv/datapacks_dev/rolla" "$world/datapacks"