Tiếng Việt

Công cụ dành cho nhà phát triển · Chạy Docker sang trình chuyển đổi soạn thảo Docker

Dấu ngoặc kép, ngắt dòng và $VARS: phân tích chính xác lệnh chạy docker

· Cách thức hoạt động

docker command-line trích dẫn

Sơ đồ trừu tượng minh họa các trích dẫn, ngắt dòng và $vars: phân tích chính xác lệnh chạy docker
Hình minh họa vector ToolAcre gốc

Lệnh chạy docker là đầu vào shell trước khi Docker nhìn thấy nó. Bài đăng này giải thích cách trích dẫn và tiếp tục dòng thay đổi mã thông báo là gì và tại sao không có công cụ chuyển đổi nào có thể mở rộng các biến shell của bạn.

Trình chuyển đổi đã nhận được $HOME theo nghĩa đen — lệnh hoạt động trong terminal của bạn vì shell sẽ mở rộng nó trước khi docker chạy

Trình chuyển đổi đã nhận được $HOME theo nghĩa đen — lệnh hoạt động trong thiết bị đầu cuối của bạn vì shell sẽ mở rộng nó trước khi docker chạy. Bằng chứng: $HOME vẫn là văn bản vì mã thông báo không thực hiện mở rộng. Tái tạo mã thông báo shell bằng chữ dùng một lần. Ghép nối từng lần xuất hiện nguồn với mã thông báo được trích dẫn và phần tiếp theo; mở rộng dự trữ và phân tích cú pháp Windows để xem xét đích.

Sự cố trích dẫn cũng tiết lộ rằng Một ranh giới sự cố trích dẫn riêng biệt là các trích dẫn đơn là theo nghĩa đen và quá trình trích dẫn kép được ghi lại. Bằng chứng: dấu ngoặc đơn là nghĩa đen và dấu ngoặc kép xử lý các lần thoát được ghi lại. Ràng buộc mã thông báo shell này là một điểm dừng. Kiểm tra mã thông báo được trích dẫn và phần tiếp theo mà không có hoạt động sản xuất, sau đó ghi lại quá trình kiểm tra máy chủ để mở rộng và phân tích cú pháp Windows.

Mã thông báo này giống với các quy tắc từ shell POSIX đã chọn nhưng không thực hiện mở rộng biến hoặc lệnh

Shell đầu tiên, Docker thứ hai - mã thông báo mà Docker nhận được là kết quả của việc trích dẫn, phân tách và mở rộng shell. Bằng chứng: các quy tắc từ giống POSIX đã chọn được triển khai mà không trở thành lớp vỏ; Mã thông báo này giống với các quy tắc từ shell POSIX đã chọn nhưng không thực hiện mở rộng biến hoặc lệnh. Theo dõi mã thông báo mã thông báo shell thành mã thông báo được trích dẫn và phần tiếp theo. Tách các giá trị được sắp xếp khỏi các trường giá trị cuối cùng; việc mở rộng và phân tích cú pháp Windows nằm ngoài bộ sưu tập.

Một ranh giới cơ chế trích dẫn liên quan là đối với phần trích dẫn này, hãy giữ nguyên lệnh gốc cho phần trích dẫn này và cảnh báo cho phần trích dẫn này bên cạnh tệp ứng cử viên này. Bằng chứng: kho lưu trữ không cung cấp thời gian chạy rộng hơn hoặc bằng chứng lịch sử. Sử dụng thực tế mã thông báo shell này để dự đoán một thành viên hoặc số vô hướng trong các mã thông báo được trích dẫn và phần tiếp theo. Kiểm tra các cảnh báo trước khi quyết định bất cứ điều gì về việc mở rộng và phân tích cú pháp Windows.

Tiếp tục dấu gạch chéo ngược-dòng mới - tại sao dấu gạch chéo ngược ở cuối là một tính năng shell và một khoảng trắng đi lạc sau khi nó phá vỡ lệnh

Tiếp tục dấu gạch chéo ngược-dòng mới - tại sao dấu gạch chéo ngược ở cuối là một tính năng shell và một khoảng trắng đi lạc sau khi nó phá vỡ lệnh. Bằng chứng: dấu gạch chéo ngược-dòng mới biến mất trong khi dấu gạch chéo ngược đơn độc ở thiết bị đầu cuối không thành công. Đánh giá tuần tự hóa mã thông báo shell từ mô hình của nó. Trích dẫn bằng mã thông báo được trích dẫn và phần tiếp theo sẽ bảo vệ các loại nhưng không cung cấp bằng chứng hoạt động cho việc mở rộng và phân tích cú pháp Windows.

Quan sát tuần tự hóa trích dẫn thứ hai là Một ranh giới đầu ra trích dẫn riêng biệt là một mẫu wiki có thể được chuẩn hóa và các mã thông báo theo nghĩa đen của nó được kiểm tra. Bằng chứng: một mẫu wiki có thể được chuẩn hóa và các mã thông báo theo nghĩa đen của nó được kiểm tra. Đầu ra mã thông báo shell này tách biệt cài đặt khỏi ngữ cảnh không có sẵn. Giữ các mã thông báo được trích dẫn và phần tiếp theo có thể xem xét được, đồng thời kiểm tra việc mở rộng và phân tích cú pháp Windows một cách độc lập.

Dấu ngoặc đơn, dấu ngoặc kép và dấu cách trong giá trị — -e MSG='hello world' so với -e MSG=hello world

Dấu ngoặc đơn, dấu ngoặc kép và dấu cách trong giá trị — -e MSG='hello world' so với -e MSG=hello world. Dừng lại ở ngoại lệ mã thông báo shell thay vì đoán. Bất kỳ sự bổ sung nào gần các mã thông báo được trích dẫn và các phần tiếp theo đều cần có lý do dành riêng cho việc triển khai gắn liền với việc mở rộng và phân tích cú pháp Windows.

Một hạn chế ngoại lệ trích dẫn khác là Một ranh giới ngoại lệ trích dẫn riêng biệt là tính chất tùy chọn Docker tuân theo mã thông báo và không có quy tắc Windows. Bằng chứng: Tính chất tùy chọn của Docker tuân theo mã thông báo và không có quy tắc Windows. Giữ lệnh mã thông báo shell ban đầu bên cạnh các cảnh báo. Việc so sánh cho thấy những gì mã thông báo được trích dẫn và phần tiếp theo chứa cũng như quyết định mở rộng và phân tích cú pháp Windows nào vẫn thủ công.

Biểu thức đô la, cú pháp shell con và dấu ngã vẫn giữ nguyên theo nghĩa đen vì trình chuyển đổi không phải là shell

Các biến và các shell con — $PWD, $(id -u) và ~ được shell của bạn mở rộng, do đó một trình chuyển đổi sẽ nhìn thấy chúng theo nghĩa đen. Bằng chứng: ký hiệu vỏ con đánh dấu ngược lại các biến đô la và dấu ngã không bao giờ được đánh giá; Biểu thức đô la, cú pháp shell con và dấu ngã vẫn giữ nguyên theo nghĩa đen vì trình chuyển đổi không phải là shell. Xây dựng ví dụ về mã thông báo shell từ tên tổng hợp. Làm cho mọi mã thông báo được trích dẫn và mục tiếp theo có thể theo dõi được mà không để lộ chi tiết mở rộng sản xuất và phân tích cú pháp Windows.

Mẫu ví dụ trích dẫn tương tự chứng minh rằng đối với phần trích dẫn này, hãy giữ nguyên bản gốc cho lệnh và cảnh báo của phần trích dẫn này cho phần trích dẫn này bên cạnh tệp ứng cử viên này. Thực tế về mã thông báo shell được ghép nối sẽ hiển thị trong các mã thông báo được trích dẫn và phần tiếp theo. Ghi lại dòng đó và tránh các giả định về việc mở rộng và phân tích cú pháp Windows.

Ví dụ hoạt động: dọn dẹp lệnh đã dán wiki - chuẩn hóa phần tiếp theo và trích dẫn trước khi chuyển đổi, sau đó kiểm tra YAML

Ví dụ hoạt động: dọn dẹp lệnh đã dán trên wiki - chuẩn hóa phần tiếp theo và trích dẫn trước khi chuyển đổi, sau đó kiểm tra YAML. Chuyển hệ quả của mã thông báo shell thành một mã thông báo được trích dẫn có thể quan sát được và sự khác biệt liên tục. Docker sở hữu bản mở rộng sau này và phán quyết phân tích cú pháp của Windows.

Việc triển khai hệ quả trích dẫn cũng hiển thị Một ranh giới hiệu ứng trích dẫn riêng biệt là $HOME vẫn là văn bản vì trình mã thông báo không thực hiện mở rộng. Phân chia trách nhiệm mã thông báo shell: chuyển đổi ghi mã thông báo được trích dẫn và phần tiếp theo, kho lưu trữ xóa bí mật và người vận hành xác thực việc mở rộng và phân tích cú pháp Windows.

Trích dẫn shell của Windows và bản mở rộng POSIX hoàn chỉnh đều nằm ngoài trình phân tích cú pháp này

Điều này không đề cập đến - các vấn đề phân tích cú pháp tùy chọn riêng của docker run, chẳng hạn như = so với dấu cách và sự khác biệt trong trích dẫn của Windows shell. Bằng chứng: Tính chất tùy chọn của Docker tuân theo mã thông báo và không có quy tắc Windows; Trích dẫn shell của Windows và bản mở rộng POSIX hoàn chỉnh đều nằm ngoài trình phân tích cú pháp này. Giới hạn phạm vi mã thông báo shell đối với các mã thông báo được trích dẫn và các nhánh tiếp theo được hiển thị ở đây. Các biểu mẫu và mặc định lân cận không thể trả lời các câu hỏi mở rộng và phân tích cú pháp Windows.

Thêm một giới hạn phạm vi trích dẫn nữa là giữ nguyên lệnh ban đầu cho phần trích dẫn này và các cảnh báo bên cạnh tệp ứng cử viên này. Hãy coi ranh giới mã thông báo shell này là một loại trừ. Ưu tiên các mã thông báo được trích dẫn chính xác và phần tiếp theo hơn là các dự đoán về việc mở rộng và phân tích cú pháp Windows.

Bài học rút ra: cung cấp cho trình chuyển đổi những gì Docker sẽ thấy - và thay thế các biến shell bằng các giá trị bằng chữ hoặc nội suy Compose ${VAR}

Bài học rút ra: cung cấp cho trình chuyển đổi những gì Docker sẽ thấy — và thay thế các biến shell bằng các giá trị bằng chữ hoặc nội suy Compose ${VAR}. Bằng chứng: đầu vào đáng tin cậy có nghĩa là cung cấp các từ ngữ có mục đích phân tích cú pháp. Kiểm tra mã thông báo shell dưới dạng tùy chọn nguồn, trường mô hình, mã thông báo được trích dẫn, dòng tiếp tục và cảnh báo. Xóa các bí mật trước khi kiểm tra việc mở rộng và phân tích cú pháp Windows.

Cuối cùng, nguồn trích dẫn trích dẫn xác nhận Một ranh giới quyết định trích dẫn riêng biệt là dấu gạch chéo ngược-dòng mới biến mất trong khi dấu gạch chéo ngược đơn độc ở thiết bị đầu cuối không thành công. Đóng mã thông báo shell một cách hẹp: mã thông báo được trích dẫn và phần tiếp theo là một ứng cử viên; việc mở rộng và phân tích cú pháp Windows cũng như tính tương đương của shell không được đảm bảo.