我正在尝试自动重置 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
您的 shell 将引用的参数解释为单个字符串,而不是选项和参数。不要引用选项并单独引用每个参数
将失败:
mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"
不会失败:
mkdir -p "$world/datapacks"
cp -R "/srv/datapacks_dev/rolla" "$world/datapacks"