Khi viết kịch bản shell bạn có thể trong một tình huống mà bạn cần phải vượt qua một khối multiline của văn bản hoặc mã với một lệnh tương tác, chẳng hạn như tee , cat hoặc sftp .

Trong Bash và các trình bao khác như Zsh, tài liệu Tại đây (Heredoc) là một loại chuyển hướng cho phép bạn chuyển nhiều dòng đầu vào cho một lệnh.

Cú pháp viết HereDoc có dạng sau:

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER
  • Dòng đầu tiên bắt đầu bằng một lệnh tùy chọn, theo sau là toán tử chuyển hướng đặc biệt << và số nhận dạng phân tách.
    • Bạn có thể sử dụng bất kỳ chuỗi nào làm mã định danh phân tách, thường được sử dụng nhất là EOF hoặc END.
    • Nếu mã định danh phân tách không được trích dẫn, trình bao sẽ thay thế tất cả các biến, lệnh và ký tự đặc biệt trước khi chuyển các dòng tài liệu tại đây đến lệnh.
    • Thêm dấu trừ vào toán tử chuyển hướng <<- sẽ khiến tất cả các ký tự đầu tab bị bỏ qua. Điều này cho phép bạn sử dụng thụt lề khi viết tài liệu tại đây trong các tập lệnh shell. Các ký tự khoảng trắng ở đầu không được phép, chỉ có tab.
  • Khối tài liệu ở đây có thể chứa chuỗi, biến, lệnh và bất kỳ loại đầu vào nào khác.
  • Dòng cuối cùng kết thúc bằng số phân định. Khoảng trắng phía trước dấu phân cách không được phép.

Ví dụ cơ bản về Heredoc

Trong phần này, chúng ta sẽ xem xét một số ví dụ cơ bản về cách sử dụng heredoc.

Heredoc thường được sử dụng kết hợp với lệnh cat .

Trong ví dụ sau, chúng ta đang chuyển hai dòng văn bản chứa một biến môi trường và một lệnh để cat sử dụng tài liệu here.

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Như bạn có thể thấy từ đầu ra bên dưới, cả biến và đầu ra lệnh đều được thay thế:

The current working directory is: /home/hocdevops
You are logged in as: hocdevops

Hãy xem điều gì sẽ xảy ra nếu chúng ta đặt dấu phân cách trong dấu ngoặc kép hoặc đơn.

cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Bạn có thể nhận thấy rằng khi dấu phân cách được trích dẫn thì không có trình bao nào thực hiện mở rộng tham số và thay thế lệnh.

The current working directory is: $PWD
You are logged in as: $(whoami)

Nếu bạn đang sử dụng heredoc bên trong một câu lệnh hoặc vòng lặp, hãy sử dụng <<- thao tác chuyển hướng cho phép bạn thụt lề mã của mình.

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

Output:

Line with a leading tab.

Thay vì hiển thị kết quả trên màn hình, bạn có thể chuyển hướng nó vào một tập tin bằng cách sử dụng >>> khai thác.

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Nếu file.txt không tồn tại, nó sẽ được tạo. Khi sử dụng > tệp sẽ bị ghi đè, trong khi tệp >> sẽ nối đầu ra vào tệp.

Đầu vào heredoc cũng có thể được nối. Trong ví dụ sau, sed lệnh sẽ thay thế tất cả các trường hợp của l ký tự bằng e:

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF

Output:

Heeeo
Wored

Để ghi dữ liệu đường ống vào một tệp:

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

Sử dụng Heredoc với SSH

Sử dụng Heredoc là một trong những cách thuận tiện và dễ dàng nhất để thực hiện nhiều lệnh trên một hệ thống từ xa qua SSH .

Khi sử dụng dấu phân cách không được trích dẫn, hãy đảm bảo rằng bạn thoát khỏi tất cả các biến, lệnh và ký tự đặc biệt, nếu không chúng sẽ được nội suy cục bộ:

ssh -T user@host.com << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF

Output:

The current local working directory is: /home/devops
The current remote working directory is: /home/user

Bạn cũng có thể muốn thiết lập xác thực dựa trên khóa SSH và kết nối với máy chủ Linux của mình mà không cần nhập mật khẩu.

Phần kết luận

Trong hướng dẫn này, bạn đã biết được là gì heredoc và cách sử dụng nó trong các tập lệnh shell của bạn.

Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng để lại bình luận.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments