![Bash 스크립트 mkdir 또는 cp에서 혼합 변수/문자열 리터럴 매개 변수를 사용하는 방법은 무엇입니까?](https://linux55.com/image/163205/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20mkdir%20%EB%98%90%EB%8A%94%20cp%EC%97%90%EC%84%9C%20%ED%98%BC%ED%95%A9%20%EB%B3%80%EC%88%98%2F%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%A6%AC%ED%84%B0%EB%9F%B4%20%EB%A7%A4%EA%B0%9C%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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"