Android

ทุบตี heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

สารบัญ:

Anonim

เมื่อเขียนเชลล์สคริปต์คุณอาจตกอยู่ในสถานการณ์ที่คุณต้องส่งบล็อคข้อความหรือรหัสหลายบรรทัดไปยังคำสั่งแบบโต้ตอบเช่น tee , cat หรือ sftp

ใน Bash และเชลล์อื่น ๆ เช่น Zsh เอกสาร Here (Heredoc) เป็นประเภทการเปลี่ยนเส้นทางที่อนุญาตให้คุณส่งผ่านอินพุตหลายบรรทัดไปยังคำสั่ง

ไวยากรณ์ของการเขียน HereDoc ใช้แบบฟอร์มต่อไปนี้:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • บรรทัดแรกเริ่มต้นด้วยคำสั่งทางเลือกตามด้วยโอเปอเรเตอร์การเปลี่ยนเส้นทางแบบพิเศษ << และตัวคั่นที่กำหนด
    • คุณสามารถใช้สตริงใด ๆ เป็นตัวกำหนดที่ใช้มากที่สุดคือ EOF หรือ END หากตัวระบุการกำหนดค่าไม่ถูกอ้างอิงเชลล์จะแทนที่ตัวแปรคำสั่งและอักขระพิเศษทั้งหมดก่อนที่จะส่งบรรทัดเอกสารที่นี่ไปยังคำสั่ง เครื่องหมายลบไปที่โอเปอเรเตอร์การเปลี่ยนเส้นทาง <<- จะทำให้อักขระแท็บนำหน้าทั้งหมดถูกละเว้น สิ่งนี้อนุญาตให้คุณใช้การเยื้องเมื่อเขียนเอกสารที่นี่ในเชลล์สคริปต์ ไม่อนุญาตให้ใช้อักขระนำหน้าช่องว่างนำหน้าเท่านั้น
    บล็อกเอกสารที่นี่สามารถมีสตริงตัวแปรคำสั่งและอินพุตประเภทอื่น ๆ บรรทัดสุดท้ายลงท้ายด้วยตัวระบุที่คั่น ไม่อนุญาตให้ใช้พื้นที่สีขาวด้านหน้าตัวคั่น

ตัวอย่าง Heredoc พื้นฐาน

ในส่วนนี้เราจะดูตัวอย่างพื้นฐานของวิธีการใช้ heredoc

Heredoc มักใช้ร่วมกับคำสั่ง cat

ในตัวอย่างต่อไปนี้เรากำลังส่งข้อความสองบรรทัดที่มีตัวแปรสภาพแวดล้อมและคำสั่งให้ cat ใช้เอกสาร here

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

ดังที่คุณเห็นจากผลลัพธ์ด้านล่างทั้งตัวแปรและเอาต์พุตคำสั่งจะถูกแทนที่:

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

เรามาดูกันว่าจะเกิดอะไรขึ้นถ้าเราใส่ตัวคั่นไว้ในเครื่องหมายคำพูดเดี่ยวหรือคู่

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

คุณสามารถสังเกตเห็นว่าเมื่อตัวคั่นถูกยกมาไม่มีการขยายพารามิเตอร์และการทดแทนคำสั่งจะทำโดยเปลือก

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.

แทนที่จะแสดงผลลัพธ์บนหน้าจอคุณสามารถเปลี่ยนเส้นทางไปยังไฟล์โดยใช้ตัวดำเนินการ > , >>

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

หากไม่มีไฟล์ file.txt มันจะถูกสร้างขึ้น เมื่อใช้ > ไฟล์จะถูกเขียนทับในขณะที่ >> จะผนวกเอาต์พุตไปยังไฟล์

อินพุต heredoc ยังสามารถไพพ์ได้ ในตัวอย่างต่อไปนี้คำสั่ง sed จะแทนที่อินสแตนซ์ทั้งหมดของอักขระ l ด้วย e :

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

Heeeo Wored

ในการเขียนข้อมูล piped ไปยังไฟล์:

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

ใช้ Heredoc กับ SSH

การใช้ Heredoc เป็นหนึ่งในวิธีที่สะดวกและง่ายที่สุดในการรันคำสั่งหลายคำสั่งในระบบระยะไกลผ่าน SSH

เมื่อใช้ตัวคั่นแบบไม่มีเครื่องหมายให้แน่ใจว่าคุณได้หลีกเลี่ยงตัวแปรคำสั่งและอักขระพิเศษมิฉะนั้นจะถูกแก้ไขภายใน:

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

คุณอาจต้องการตั้งค่าการรับรองความถูกต้องโดยใช้คีย์ SSH และเชื่อมต่อกับเซิร์ฟเวอร์ Linux ของคุณโดยไม่ต้องป้อนรหัสผ่าน

ข้อสรุป

ในคู่มือนี้คุณได้เรียนรู้สิ่งที่เป็น heredoc และวิธีการใช้ในสคริปต์เชลล์ของคุณ

bash terminal