나는 인수가 많은 명령에 대한 스크립트에서 (가독성을 높이기 위해) 다음 형식을 사용하는 것을 좋아합니다.
docker run \
--rm \
-u root \
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean
그러나 때로는 이러한 매개변수 중 하나를 주석 처리하고 싶을 때가 있습니다. 예를 들면 다음과 같습니다.
# -p 8080:8080
EOL은 반환으로 해석되고 명령이 실패하기 때문에 작동하지 않습니다. 또한 이것을 시도했습니다:
\ # -p 8080:8080
이것도 작동하지 않습니다.
질문: 매개변수가 여전히 자체 줄에 있지만 스크립트를 실행할 수 있도록 매개변수를 주석 처리하는 방법이 있습니까?
답변1
줄의 일부를 주석 처리할 수 없습니다.
줄 바꿈이 이스케이프되므로 명령은 실제로 (셸 파서에 대한) 단일 라인이며 단일 라인의 일부는 주석 처리될 수 없습니다(끝 부분 제외).
대신, 편집기에서 원래 명령을 복사하여 완전히 주석 처리하고 수정된 명령은 주석 처리하지 않은 상태로 남겨둘 수도 있습니다.
docker run \
--rm \
-u root \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean
# Was originally:
# docker run \
# --rm \
# -u root \
# -p 8080:8080 \
# -v jenkins-data:/var/jenkins_home \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -v "$HOME":/home \
# jenkinsci/blueocean
-p
또는 가끔 옵션과 해당 인수를 제거하거나 변경하려는 경우 ( bash
또는 동일한 배열 구문을 사용하는 쉘을 가정):
port=( -p 8080:8080 )
docker run \
--rm \
-u root \
"${port[@]}" \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean
그런 다음 할당을 변경하거나 주석을 달면 됩니다 port
.
한 단계 더 나아가세요:
docker_run_args=(
--rm
-u root
-p 8080:8080
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v "$HOME":/home
jenkinsci/blueocean
)
docker run "${docker_run_args[@]}"
배열 할당 내에서 한 줄을 주석 처리하는 데 문제가 없습니다.
docker_run_args=(
--rm
-u root
# -p 8080:8080
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v "$HOME":/home
jenkinsci/blueocean
)
docker run "${docker_run_args[@]}"
답변2
빈 명령 대체를 사용할 수 있습니다.
docker run \
--rm \
-u root \
$(: -p 8080:8080 ) \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
jenkinsci/blueocean