이 Dockerfile 진입점에서 "set --"은 무엇을 합니까?

이 Dockerfile 진입점에서 "set --"은 무엇을 합니까?

이게 뭔지 이해하려고 노력 중이야Docker 진입점은 다음을 수행합니다..

이것은 Dockerfile을 작성할 때 매우 일반적인 패턴인 것 같지만 제 bash 기술은 제한되어 있고 특별한 bash 표기법 트릭을 모두 알지 못합니다.

또한 "--", "$!" 등을 검색하는 것도 어렵습니다. bash 세계에서는 이것을 뭐라고 부르나요?

전체적으로 다음 코드 줄은 무엇을 하려고 합니까?

if [ "${1#-}" != "$1" ]; then
  set -- haproxy "$@"
fi

답변1

set명령(옵션이 설정되지 않은 경우)은 위치 인수를 설정합니다.

$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c

이것이 --"이후는 아무것도 옵션으로 취급하지 않는다"라는 기준이다

이는 "$@"모두 기존 위치 매개변수입니다.

그래서 주문은

set -- haproxy "$@"

haproxy등의 앞에 이 단어를 넣습니다 .$1 $2

예를 들어

$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4   
haproxy,a,b,c

답변2

이것명령 설정옵션(플래그 포함) 및 매개변수 지원

set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [argument …]
  • options명령이 작동하는 방식(예: 파일 이름을 해석하는 방식)을 변경하는 데 사용할 수 있습니다.
  • arguments명령에 수행할 작업을 알려줍니다. 즉, 사용자 입력

예를 들어 set 명령에는 옵션이 있습니다.

-a: 생성되거나 수정된 ​​모든 변수나 함수에는 내보내기 속성이 부여되고 후속 명령 환경으로 내보내기 위해 표시됩니다.

실행할 때:

$ set -a 12; echo $1
12

$1으로 설정되어 있지만 명령 에 의해 소비되는 것을 볼 수 있습니다 12.-aset

정말로 as (and as ) -a로 설정하고 싶다면 (즉, 그 뒤의 모든 것은 인수임)을 사용하여 옵션 처리를 중지하도록 명령에 지시 할 수 있습니다.$112$2--set

$ set -- -a 12; echo $1 $2
-a 12

관련 정보