What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179
Mục lục:
Khi viết các kịch bản shell, bạn có thể rơi vào tình huống cần truyền một khối văn bản hoặc mã nhiều dòng cho một lệnh tương tác, chẳng hạn như
tee
,
cat
hoặc
sftp
.
Trong Bash và các shell khác như Zsh, tài liệu Here (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:
<< '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à mã định danh phân định.- Bạn có thể sử dụng bất kỳ chuỗi nào làm định danh phân định, thường được sử dụng là EOF hoặc END. Nếu định danh phân định 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 ở đây vào lệnh. dấu trừ cho toán tử chuyển hướng
<<-, sẽ khiến tất cả các ký tự tab hàng đầu bị bỏ qua. Điều này cho phép bạn sử dụng thụt lề khi viết ở đây - tài liệu bằng các tập lệnh shell. Các ký tự khoảng trắng hàng đầu không được phép, chỉ có tab.
Khối tài liệu ở đây có thể chứa các 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 mã định danh phân định. Không được phép có khoảng trắng phía trước dấu phân cách. - Bạn có thể sử dụng bất kỳ chuỗi nào làm định danh phân định, thường được sử dụng là EOF hoặc END. Nếu định danh phân định 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 ở đây vào lệnh. dấu trừ cho toán tử chuyển hướng
Ví dụ di truyền cơ bản
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 mèo.
Trong ví dụ sau, chúng ta sẽ truyền hai dòng văn bản chứa biến môi trường và lệnh để sử dụng tài liệu ở đây.
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/linuxize You are logged in as: linuxize
Chúng ta 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 đơn hoặc dấu ngoặc kép.
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, không có sự mở rộng tham số và việc thay thế lệnh được thực hiện bởi trình bao.
The current working directory is: $PWD You are logged in as: $(whoami)
if true; then cat <<- EOF Line with a leading tab. EOF fi
Line with a leading tab.
Thay vì hiển thị đầu ra trên màn hình, bạn có thể chuyển hướng nó đến một tệp bằng cách sử dụng các toán tử
>
,
>>
.
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
>>
sẽ nối đầu ra vào tệp.
Đầu vào heredoc cũng có thể được dẫn. Trong ví dụ sau, lệnh
sed
sẽ thay thế tất cả các thể hiện của ký tự
l
bằng
e
:
cat <<'EOF' | sed 's/l/e/g' Hello World EOF
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 thi 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 trích dẫn, đảm bảo bạn thoát 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 [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF
The current local working directory is: /home/linuxize 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 đã tìm hiểu di truyền là gì và cách sử dụng nó trong tập lệnh shell của bạn.
thiết bị đầu cuối bashCách chạy Bash trên Ubuntu trên Windows 10
Kích hoạt Windows Subsystem cho Linux sẽ cho phép bạn chạy Bash trên Ubuntu trên Windows 10, Bash script , Linux công cụ dòng lệnh, công cụ Linux đầu tiên
Mảng Bash
Mảng là một trong những cấu trúc dữ liệu cơ bản và được sử dụng nhiều nhất. Trong bài viết này, chúng tôi sẽ đề cập đến các mảng Bash và giải thích cách sử dụng chúng trong các tập lệnh Bash của bạn.
Bash cho vòng lặp
Có 3 cấu trúc vòng lặp cơ bản trong kịch bản Bash, cho vòng lặp, vòng lặp while và cho đến vòng lặp. Trong hướng dẫn này, chúng tôi sẽ đề cập đến những điều cơ bản về các vòng lặp trong Bash cũng như phá vỡ và tiếp tục các câu lệnh để thay đổi dòng chảy của một vòng lặp.







