이 Dockerfile 진입 점에서 "set-"는 무엇입니까?


40

Docker 진입 점이 무엇을 이해하려고합니다 .

Dockerfiles를 작성할 때 매우 일반적인 패턴 인 것처럼 보이지만 내 배쉬 기술은 제한되어 있으며 모든 특수 배쉬 기호 쿵푸에 대해 전혀 알지 못합니다.

또한, "-", "$!"에 대해 Google을 사용하기가 어렵습니다. 등등. 이것은 bash 세계에서 무엇이라고 불리는가?

요약하자면, 다음과 같은 행은 무엇입니까?

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

답변:


54

set명령 (옵션을 설정하지 않는 경우)의 위치 파라미터를 설정 예

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

--표준 "이 옵션으로이 다음 치료하지 아무것도 할"입니다

"$@"기존의 모든 위치 paramters 있습니다.

그래서 순서

set -- haproxy "$@"

haproxy앞에 단어 를 넣을 것 입니다 $1 $2.

예 :

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

"-"를 사용하여 차이를 보지 못합니다. 여기에서 시도하고 동일한 결과를 얻었습니다. 차이점을 강조하기 위해 답변을 향상시킬 수 있다면 좋겠습니다.
Lucas Pottersky

8
set -- -z 2 3 4와 비교하십시오 set -z 2 3 4. 는 --정거장 -a옵션으로 해석 존재합니다. 이 경우에는 필요 하지 않지만 --다음 사항을 확인할 때 사용 습관을들이는 것이 "좋은 습관" 입니다. –)
Stephen Harris

1
다른 주요 차이점은 다른 스크립트 내에서 스크립트를 소싱하는 경우 set -- $arg1 $arg2소스 스크립트를 사용하여 인수를 읽을 수 있다는 것입니다.
dragon788
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.