Các tài liệu "ở đây được đặt tên một cách kỳ lạ" cho phép bạn sử dụng chuyển hướng đầu vào / ra bên trong các tập lệnh Bash trên Linux. Chúng là một cách tuyệt vời để tự động hóa các lệnh, bạn cần chạy trên một máy tính từ xa.
Đây là tài liệu
Nhiều lệnh trong Linux có hai hoặc ba tên chữ cái. Đây là một phần những gì làm phát sinh khái niệm rằng Linux rất khó học và đầy đủ các lệnh arcane. Nhưng một trong những tên kỳ lạ nhất trong Linux không phải là một trong những tên ngắn khó hiểu. "Ở đây tài liệu" không phải là tài liệu, và nó không thực sự rõ ràng "ở đây" đề cập đến, một trong hai.
Chúng là một cấu trúc tương đối tối nghĩa, nhưng chúng rất hữu ích. Tất nhiên, đây là Linux, vì vậy có nhiều hơn một cách để da một con mèo. Một số chức năng được cung cấp bởi tại đây các tài liệu có thể được sao chép theo những cách khác. Những phương pháp thay thế thường phức tạp hơn. Trong lập trình và kịch bản, "phức tạp hơn" cũng có nghĩa là "dễ bị lỗi hơn" và mã của bạn khó duy trì hơn.
Trường hợp đây, các tài liệu thực sự Excel là trong việc tự động hóa các lệnh mà bạn muốn gửi đến một máy tính từ xa từ một kết nối được thiết lập từ trong một tập lệnh. Làm cho kết nối dễ dàng, nhưng một khi kết nối đã được thực hiện, làm thế nào để bạn "bơm" các lệnh của bạn từ tập lệnh của bạn vào shell trên máy tính từ xa? Ở đây các tài liệu cho phép bạn làm điều đó rất đơn giản.
Nguyên tắc cơ bản của các tài liệu ở đây
Đại diện thành ngữ của tài liệu ở đây trông như thế này:
Command & lt; & lt; Limit_String. . . chữ dữ liệu biến . . Limit_String
-
CHỈ HUY
: Đây có thể là bất kỳ lệnh Linux nào chấp nhận đầu vào được chuyển hướng. Lưu ý,
echo.chỉ huy Không chấp nhận chuyển hướng đầu vào . Nếu bạn cần ghi vào màn hình, bạn có thể sử dụngcon mèochỉ huy, mà làm . - & lt; & lt; : Nhà điều hành chuyển hướng.
- Limit_String. : Đây là một nhãn hiệu. Nó có thể là bất cứ thứ gì bạn thích miễn là nó không xuất hiện trong danh sách dữ liệu bạn đang chuyển hướng vào lệnh. Nó được sử dụng để đánh dấu phần cuối của danh sách văn bản, dữ liệu và biến.
- Danh sách dữ liệu : Một danh sách dữ liệu được đưa vào lệnh. Nó có thể chứa các lệnh, văn bản và biến. Nội dung của danh sách dữ liệu được đưa vào lệnh một dòng tại một thời điểm cho đến khi gặp phải _limit_string.
Bạn có thể sẽ thấy các ví dụ về các tài liệu ở đây sử dụng "EOF" làm chuỗi giới hạn. Chúng tôi không ủng hộ cách tiếp cận đó. Nó hoạt động, nhưng "EOF" có nghĩa là "kết thúc tệp". Ngoài trường hợp hiếm hoi, nơi một tài liệu gia đình là điều cuối cùng trong tệp kịch bản, "EOF" đang được sử dụng sai.
Nó sẽ làm cho các kịch bản của bạn có thể đọc được nhiều hơn nhiều nếu bạn sử dụng một chuỗi giới hạn đề cập đến những gì bạn đang làm. Nếu bạn đang gửi một loạt các lệnh cho một máy tính từ xa hơn
Vỏ an toàn
(Ssh), một chuỗi giới hạn gọi là một cái gì đó như "_remote_commands" sẽ có ý nghĩa hoàn hảo. Bạn không cần phải bắt đầu chúng với dấu gạch dưới "
_
" tính cách. Chúng tôi làm điều đó bởi vì nó đánh dấu chúng là một cái gì đó khác thường trong kịch bản của bạn.
Ví dụ đơn giản
Bạn có thể sử dụng các tài liệu ở đây trên dòng lệnh và trong các tập lệnh. Khi bạn nhập như sau trong cửa sổ Terminal, bạn sẽ thấy một "
& gt;
"Dấu thời hạn liên tục mỗi lần bạn nhấn" Enter. " Khi bạn nhập chuỗi giới hạn "_end_of_text" và nhấn "enter", danh sách các trang web được truyền đến
con mèo,
và chúng được hiển thị trong cửa sổ đầu cuối.
CAT & LT; & lt; _end_of_text. Làm thế nào để đam mê Đánh giá Geek. Lifesavvy. Cloudsavvy nó Mindbounce. _end_of_text
Đó không phải là những bài tập đáng giá nhất, nhưng nó chứng minh rằng không có gì được gửi đến lệnh cho đến khi toàn bộ danh sách dữ liệu được đối chiếu và chuỗi giới hạn gặp phải. Các
con mèo
Lệnh không nhận được bất kỳ đầu vào nào cho đến khi bạn nhập chuỗi giới hạn "_end_of_text" và nhấn phím "Enter".
Chúng ta có thể làm điều tương tự trong một kịch bản. Nhập hoặc sao chép ví dụ này vào trình soạn thảo, lưu tệp dưới dạng "heredoc-1.sh" và đóng trình chỉnh sửa.
#! / Bin / bash Cat & lt; & lt; "_end_of_text" Tên người dùng của bạn là: $ (WHOAMI) Thư mục làm việc hiện tại của bạn là: $ pwd Phiên bản Bash của bạn là: $ Bash_Version _end_of_text
Khi bạn theo dõi bài viết này, mỗi lần bạn tạo một kịch bản, bạn sẽ cần phải
làm cho nó thực thi
trước khi nó sẽ chạy. Trong mỗi trường hợp,
sử dụng
chmod.
chỉ huy
. Thay thế tên của tập lệnh trong mỗi ví dụ cho tên script được sử dụng ở đây.
chmod + x heredoc-1.sh
Kịch bản này chứa hai biến môi trường,
$ Pwd.
và
$ Bash_version.
. Tên biến môi trường được thay thế bằng giá trị dữ liệu của chúng - thư mục làm việc hiện tại và phiên bản Bash-Khi tập lệnh được thực thi.
Kịch bản cũng sử dụng
Lệnh thay thế.
trên
NS
tôi là ai
chỉ huy
. Tên của lệnh được thay thế bằng đầu ra của riêng nó. Đầu ra từ toàn bộ tập lệnh được ghi vào cửa sổ đầu cuối theo lệnh CAT. Chúng tôi chạy kịch bản bằng cách gọi nó bằng tên:
./ heredoc-1.sh
Nếu bạn sửa đổi tập lệnh và bọc chuỗi giới hạn trong dòng đầu tiên của tài liệu ở đây trong dấu ngoặc kép "
"
", Danh sách dữ liệu được truyền vào lệnh Dòng tài liệu tại đây. Tên biến được hiển thị thay vì giá trị thay đổi và thay thế lệnh sẽ không diễn ra.
#! / Bin / bash Cat & lt; & lt; - "_end_of_text" Tên người dùng của bạn là: $ (WHOAMI) Thư mục làm việc hiện tại của bạn là: $ pwd Phiên bản Bash của bạn là: $ Bash_Version _end_of_text
Xử lý các ký tự tab.
Theo mặc định, các ký tự tab trong danh sách dữ liệu của bạn sẽ được giữ lại và ghi vào cửa sổ Terminal. Sao chép và lưu ví dụ này dưới dạng "heredoc-2.sh." Làm cho nó thực thi bằng cách sử dụng
chmod.
chỉ huy. Chỉnh sửa các dòng thụt lề để đảm bảo rằng chúng có một hoặc hai ký tự tab ở đầu dòng chứ không phải là một loạt các dấu cách.
#! / Bin / bash
Cat & lt; & lt; _end_of_text.
Tên người dùng của bạn là: $ (WHOAMI)
Thư mục làm việc hiện tại của bạn là: $ pwd
Phiên bản Bash của bạn là: $ Bash_Version
_end_of_text
./ heredoc-2.sh
Các tab được ghi vào cửa sổ Terminal.
Bằng cách thêm một dấu gạch ngang
-
"Đối với toán tử chuyển hướng, tài liệu ở đây sẽ bỏ qua các ký tự tab hàng đầu. Lưu ví dụ này dưới dạng "heredoc-3.sh" và làm cho nó thực thi.
#! / Bin / bash
Cat & lt; & lt; - _end_of_text
Tên người dùng của bạn là: $ (WHOAMI)
Thư mục làm việc hiện tại của bạn là: $ pwd
Phiên bản Bash của bạn là: $ Bash_Version
_end_of_text
./ heredoc-3.sh
Các tab được bỏ qua. Điều này có vẻ tầm thường, nhưng đó là một cách gọn gàng để đối phó với các tab hàng đầu do các phần được thụt lề của các tập lệnh.
Vòng lặp và các cấu trúc logic khác thường được thụt lề. Nếu tài liệu ở đây của bạn được chứa trong một phần thụt lề của tập lệnh, sử dụng dấu gạch ngang
-
"Với toán tử chuyển hướng loại bỏ các vấn đề định dạng do các ký tự tab hàng đầu gây ra.
#! / Bin / bash nếu đúng; sau đó Cat & lt; & lt; - _limit_string Dòng 1 với một tab hàng đầu. Dòng 2 với một tab hàng đầu. Dòng 3 với một tab hàng đầu. _limit_string. fi
Chuyển hướng đến một tập tin
Đầu ra từ lệnh được sử dụng với tài liệu ở đây có thể được chuyển hướng thành một tệp. Sử dụng "
& gt;
"(Tạo tệp) hoặc"
& gt; & gt;
"(Tạo tệp nếu nó không tồn tại, nối vào tệp nếu nó) Người vận hành chuyển hướng
sau
Chuỗi giới hạn trong dòng đầu tiên của tài liệu ở đây.
Kịch bản này là "heredoc-4.sh." Nó sẽ chuyển hướng đầu ra của nó thành tệp văn bản có tên là "session.txt."
#! / Bin / bash Cat & lt; & lt; _end_of_text & gt; session.txt. Tên người dùng của bạn là: $ (WHOAMI) Thư mục làm việc hiện tại của bạn là: $ pwd Phiên bản Bash của bạn là: $ Bash_Version _end_of_text
./ heredoc-4.sh
Mèo Bady.Text
Đường ống đầu ra sang lệnh khác
Đầu ra từ lệnh được sử dụng trong tài liệu ở đây có thể được chuyển dưới dạng đầu vào sang lệnh khác. Sử dụng
ống "
|.
" nhà điều hành
sau
Chuỗi giới hạn trong dòng đầu tiên của tài liệu ở đây. Chúng ta sẽ chuyển đầu ra từ lệnh tại đây tài liệu,
con mèo
, vào trong
SED.
. Chúng tôi muốn
thay thế tất cả các lần xuất hiện
của bức thư "A" với chữ "E".
Đặt tên cho kịch bản này "heredoc-5.sh."
#! / Bin / bash Cat & lt; & lt; _end_of_text |. SED 'S / A / E / G' Thế nào Đến Gaak. _end_of_text
./ heredoc-5.sh
"Gaak" đã được sửa thành "Geek."
Gửi tham số đến một chức năng
Lệnh được sử dụng với tài liệu ở đây có thể là một chức năng trong tập lệnh.
Kịch bản này truyền một số dữ liệu xe vào một chức năng. Hàm đọc dữ liệu như thể nó đã được người dùng nhập vào. Các giá trị của các biến sau đó được in. Lưu tập lệnh này dưới dạng "heredoc-6.sh".
#! / Bin / bash
# hàm set_car_details ()
set_car_details ()
Đồn tin đồn {
Đọc Make.
Đọc mô hình
Đọc new_use.
Đọc phân phối_collect.
Đọc vị trí
Đọc giá
Không
# Tài liệu ở đây truyền dữ liệu vào set_car_details ()
set_car_details & lt; & lt; _mars_rover_data.
Nasa.
Rover kiên trì
Đã sử dụng
Sưu tầm
Sao Hỏa (Long, Lat) 77,451865,18.445161
2,2 tỷ
_mars_rover_data.
# Lấy chi tiết xe
Echo "Make: $ Make"
Model "Model: $ Model"
echo "Mới hoặc đã sử dụng: $ new_use"
Echo "Giao hàng hoặc Bộ sưu tập: $ GIEVEERION_COLLECT"
Echo "Địa điểm: $ Địa điểm"
echo "Giá \ $: $ Giá"
./ heredoc-6.sh
Các chi tiết xe được ghi vào cửa sổ đầu cuối.
Tạo và gửi email
Chúng ta có thể sử dụng một tài liệu ở đây để soạn và gửi email. Lưu ý rằng chúng ta có thể chuyển các tham số vào lệnh ở phía trước của nhà điều hành chuyển hướng. Là
sử dụng linux.
thư
chỉ huy
đến
Gửi email thông qua hệ thống thư địa phương
đến tài khoản người dùng có tên là Dave Dave. Các
-NS
(Chủ đề) Tùy chọn cho phép chúng tôi chỉ định chủ đề cho email.
Ví dụ này tạo thành kịch bản "heredoc-7.sh."
#! / Bin / bash Bài viết = "Ở đây tài liệu" Trạng thái khối lượng công việc của Mail -s 'Dave & LT; & LT; _báo cáo dự án Tên người dùng: $ (whoami) Đã hoàn thành nhiệm vụ: Bài viết: $ Bài báo _Project_Report
./ heredoc-7.sh
Không có sản lượng hiển thị từ kịch bản này. Nhưng khi chúng tôi kiểm tra thư của chúng tôi, chúng tôi thấy rằng email đã được sáng tác, gửi đi và phân phối.
Sử dụng các tài liệu ở đây với SSH
Ở đây các tài liệu là một cách mạnh mẽ và thuận tiện để thực thi một số lệnh trên máy tính từ xa sau khi kết nối SSH đã được thiết lập. Nếu bạn đã thiết lập các phím SSH giữa hai máy tính, quá trình đăng nhập sẽ hoàn toàn tự động. Trong ví dụ nhanh và bẩn này, bạn sẽ được nhắc nhập mật khẩu cho tài khoản người dùng trên máy tính từ xa.
Kịch bản này là "heredoc-8.sh". Chúng ta sẽ kết nối với một máy tính từ xa có tên "Remote-PC". Tài khoản người dùng được gọi là "Dave". Chúng tôi đang sử dụng.
-NS
(Vô hiệu hóa phân bổ Pseudo-Terminal) vì chúng ta không cần một thiết bị đầu cuối giả tương tác được chỉ định cho chúng tôi.
Trong phần "Thực hiện một số tác phẩm ở đây" của tập lệnh, chúng ta có thể truyền một danh sách các lệnh và chúng sẽ được thực thi trên máy tính từ xa. Tất nhiên, bạn chỉ có thể gọi một kịch bản trên máy tính từ xa. Tập lệnh từ xa có thể chứa tất cả các lệnh và thói quen mà bạn muốn thực thi.
Tất cả những gì script-heredoc-8.sh của chúng tôi sẽ làm là cập nhật nhật ký kết nối trên máy tính từ xa. Tài khoản người dùng và tem thời gian và ngày được ghi vào tệp văn bản.
#! / Bin / bash ssh -t [email protected] & lt; & lt; _Remote_Commands. # làm một số công việc ở đây # Cập nhật nhật ký kết nối echo $ user "-" $ (ngày) & gt; & gt; /home/dave/conn_log/sscript.log. _remote_command
Khi chúng ta chạy lệnh, chúng tôi được nhắc nhập mật khẩu cho tài khoản trên Xa xôi máy vi tính.
./ heredoc-8.sh
Một số thông tin về máy tính từ xa được hiển thị và chúng tôi đã được trả về dấu nhắc lệnh.
Trên
Xa xôi
máy tính, chúng ta có thể sử dụng
con mèo
Để kiểm tra nhật ký kết nối:
CAT Conn_log / script.log
Mỗi kết nối được liệt kê cho chúng tôi.
CÓ LIÊN QUAN: Cách tạo và cài đặt các phím SSH từ vỏ Linux
Tên lạ, tính năng gọn gàng
Ở đây các tài liệu là kỳ quặc nhưng mạnh mẽ, đặc biệt là khi được sử dụng để gửi lệnh đến một máy tính từ xa. Đó sẽ là một vấn đề đơn giản để kịch bản một thói quen sao lưu bằng cách sử dụng
rsync.
. Kịch bản sau đó có thể kết nối với máy tính từ xa, kiểm tra không gian lưu trữ còn lại và gửi email cảnh báo nếu không gian nhận được thấp.
CÓ LIÊN QUAN: Cách sao lưu hệ thống Linux của bạn với RSYNC