개발자 도구 · Docker 작성 변환기로의 Docker 실행
따옴표, 줄 바꿈 및 $VARS: docker run 명령을 올바르게 구문 분석합니다.
· 작동 방식
도커 명령줄 인용
docker run 명령은 Docker가 보기 전의 셸 입력입니다. 이 게시물에서는 인용 및 줄 연속이 토큰을 변경하는 방법과 변환기가 셸 변수를 확장할 수 없는 이유를 설명합니다.
변환기가 리터럴 $HOME을 수신했습니다. 도커가 실행되기 전에 셸이 확장하기 때문에 명령이 터미널에서 작동합니다.
변환기는 리터럴 $HOME을 수신했습니다. Docker가 실행되기 전에 셸이 확장하기 때문에 명령이 터미널에서 작동합니다. 증거: $HOME은 토크나이저가 확장을 수행하지 않기 때문에 텍스트로 남아 있습니다. 일회용 리터럴로 쉘 토큰화를 재현합니다. 각 소스 발생을 인용된 토큰 및 연속과 쌍으로 연결합니다. 대상 검토를 위해 확장 및 Windows 구문 분석을 예약합니다.
인용 사건은 또한 별도의 인용 사건 경계가 작은 따옴표가 리터럴이고 큰 따옴표 프로세스 문서화된 이스케이프라는 것을 보여줍니다. 증거: 작은따옴표는 문자 그대로이고 큰따옴표는 문서화된 이스케이프를 처리합니다. 이 셸 토큰화 제약 조건은 중지 지점입니다. 제조 동작 없이 인용된 토큰과 연속을 검사한 다음 확장 및 Windows 구문 분석에 대한 호스트 검사를 문서화합니다.
이 토크나이저는 선택된 POSIX 쉘 단어 규칙과 유사하지만 변수나 명령 확장을 수행하지 않습니다.
셸이 먼저, Docker가 두 번째 — Docker가 받는 토큰은 셸의 인용, 분할 및 확장의 결과입니다. 증거: 선택된 POSIX와 유사한 단어 규칙은 쉘이 되지 않고 구현됩니다. 이 토크나이저는 선택된 POSIX 쉘 단어 규칙과 유사하지만 변수나 명령 확장을 수행하지 않습니다. 쉘 토큰화 토큰을 인용된 토큰 및 연속으로 추적합니다. 순서가 지정된 값을 마지막 값 필드와 구분하세요. 확장 및 Windows 구문 분석은 컬렉션 외부에 있습니다.
관련 인용 메커니즘 경계는 이 인용 섹션에 대해 이 인용 섹션 명령의 원본과 이 인용 섹션에 대한 경고를 이 후보 파일 옆에 유지한다는 것입니다. 증거: 저장소는 더 넓은 런타임이나 기록 증거를 제공하지 않습니다. 이 쉘 토큰화 사실을 사용하여 인용된 토큰 및 연속에서 하나의 멤버 또는 스칼라를 예측합니다. 확장 및 Windows 구문 분석에 관해 결정하기 전에 경고를 확인하세요.
백슬래시-개행 연속 — 후행 백슬래시가 쉘 기능이고 명령을 중단한 후 공백이 되는 이유
백슬래시-개행 연속 — 후행 백슬래시가 쉘 기능이고 명령을 중단한 후 공백이 되는 이유입니다. 증거: 터미널 단독 백슬래시가 실패하는 동안 백슬래시-개행 문자가 사라집니다. 해당 모델에서 쉘 토큰화 직렬화를 판단합니다. 인용된 토큰과 연속된 부분을 인용하면 유형이 보호되지만 확장 및 Windows 구문 분석에 대한 작동 증거는 제공되지 않습니다.
두 번째 인용 직렬화 관찰은 별도의 인용 출력 경계는 위키 샘플을 정규화하고 해당 리터럴 토큰을 검사할 수 있다는 것입니다. 증거: 위키 샘플은 정규화되고 리터럴 토큰을 검사할 수 있습니다. 이 셸 토큰화 출력은 설정을 사용할 수 없는 컨텍스트와 분리합니다. 인용된 토큰과 연속 내용을 검토 가능하게 유지하고 확장 및 Windows 구문 분석을 독립적으로 확인하세요.
값의 작은따옴표, 큰따옴표 및 공백 — -e MSG='hello world' 대 -e MSG=hello world
값의 작은따옴표, 큰따옴표 및 공백 — -e MSG='hello world' 대 -e MSG=hello world. 추측하는 대신 쉘 토큰화 예외에서 중지하십시오. 인용된 토큰 및 연속 항목 근처에 추가하려면 확장 및 Windows 구문 분석과 관련된 배포별 이유가 필요합니다.
또 다른 인용 예외 제약 조건은 별도의 인용 예외 경계가 Docker 옵션 특성이 토큰화를 따르고 Windows 규칙이 없다는 것입니다. 증거: Docker 옵션 특성은 토큰화를 따르며 Windows 규칙은 없습니다. 경고 옆에 원래 쉘 토큰화 명령을 유지하십시오. 비교는 인용된 토큰과 연속 내용에 포함된 내용과 수동으로 유지되는 확장 및 Windows 구문 분석 결정을 보여줍니다.
변환기가 쉘이 아니기 때문에 달러 표현식, 하위 쉘 구문 및 물결표는 리터럴로 유지됩니다.
변수 및 하위 쉘 — $PWD, $(id -u) 및 ~는 쉘에 의해 확장되므로 변환기는 이를 문자 그대로 볼 수 있습니다. 증거: 서브쉘 표기법은 달러 변수를 백틱하고 물결표는 평가되지 않습니다. 달러 표현식, 하위 쉘 구문 및 물결표는 변환기가 쉘이 아니기 때문에 리터럴로 유지됩니다. 합성 이름으로 쉘 토큰화 예제를 구축합니다. 프로덕션 확장 및 Windows 구문 분석 세부 정보를 노출하지 않고도 인용된 모든 토큰 및 연속 항목을 추적 가능하게 만듭니다.
동일한 인용 예제 샘플은 이 인용 섹션에 대해 이 인용 섹션 명령의 원본과 이 인용 섹션에 대한 경고를 이 후보 파일 옆에 유지한다는 것을 보여줍니다. 쌍을 이루는 셸 토큰화 사실은 인용된 토큰과 연속에서 표시되어야 합니다. 해당 행을 기록하고 확장 및 Windows 구문 분석에 대한 가정을 피하십시오.
작업한 예: Wiki에서 붙여넣은 명령 정리 — 변환 전 연속 및 인용을 정규화한 다음 YAML 확인
작업한 예: Wiki에 붙여넣은 명령 정리 — 연속을 정규화하고 변환 전에 인용한 다음 YAML을 확인합니다. 쉘 토큰화 결과를 하나의 관찰 가능한 인용 토큰 및 연속 차이로 변환합니다. Docker는 이후 확장 및 Windows 구문 분석 결과를 소유합니다.
인용 결과 구현은 또한 토크나이저가 확장을 수행하지 않기 때문에 $HOME이 텍스트로 유지된다는 별도의 인용 효과 경계를 보여줍니다. 분할 셸 토큰화 책임: 변환은 인용된 토큰과 연속을 작성하고 저장소는 비밀을 제거하며 운영자는 확장 및 Windows 구문 분석을 검증합니다.
Windows 셸 인용 및 전체 POSIX 확장은 모두 이 파서 외부에 있습니다.
여기서 다루지 않는 내용 — = 대 공백 및 Windows 셸 인용 차이점과 같은 docker run 자체 옵션 구문 분석 문제입니다. 증거: Docker 옵션 특성은 토큰화를 따르며 Windows 규칙은 없습니다. Windows 셸 인용 및 전체 POSIX 확장은 모두 이 파서 외부에 있습니다. 셸 토큰화 범위를 여기에 표시된 인용된 토큰 및 연속 분기로 제한하세요. 인접한 양식과 기본값은 확장 및 Windows 구문 분석 질문에 답할 수 없습니다.
이 인용 섹션에 대한 원래 명령을 유지하고 이 후보 파일 옆에 있는 경고에서 인용 범위 제한이 하나 더 따릅니다. 이 쉘 토큰화 경계를 제외로 처리하십시오. 확장 및 Windows 구문 분석에 대한 추측보다 정확한 인용 토큰과 연속을 선호합니다.
요점: Docker가 볼 수 있는 내용을 변환기에 제공하고 셸 변수를 리터럴 값 또는 Compose ${VAR} 보간법으로 대체합니다.
요점: Docker가 볼 수 있는 내용을 변환기에 제공하고 셸 변수를 리터럴 값 또는 Compose ${VAR} 보간법으로 바꾸십시오. 증거: 신뢰할 수 있는 입력은 구문 분석을 위한 문자 그대로의 단어를 제공하는 것을 의미합니다. 소스 옵션, 모델 필드, 인용 토큰, 연속 라인 및 경고로 쉘 토큰화를 감사합니다. 확장 및 Windows 구문 분석을 확인하기 전에 비밀을 제거하세요.
마지막으로, 인용 테이크아웃 소스는 별도의 인용 결정 경계가 터미널 단독 백슬래시가 실패하는 동안 백슬래시-줄바꿈이 사라지는 것임을 확인합니다. 쉘 토큰화를 좁게 닫습니다. 인용된 토큰과 연속이 후보입니다. 확장 및 Windows 구문 분석 및 셸 동등성은 보장되지 않습니다.