`>>` ในคำสั่งเทอร์มินัลหมายถึงอะไร?

Jun 28 2018

ฉันเจอคำสั่งที่ให้ไว้ด้านล่าง -

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

จากสิ่งที่ฉันเดาได้มันอาจจะใช้สำหรับการเปลี่ยนแปลงใน. bash_profile แต่มันใช้สำหรับอะไรกันแน่?

คำตอบ

31 kai-dj Jun 28 2018 at 12:06

มันเปลี่ยนเส้นทาง stdout ของโปรแกรมก่อนหน้า>>และต่อท้ายไฟล์ที่กำหนดหลังจากนั้น

48 slhck Jun 28 2018 at 14:13

คำตอบสั้น ๆ - >>ทำอะไร?

ด้วยการ>>เพิ่มผลลัพธ์ของคำสั่งเข้ากับไฟล์

คำสั่งตัวอย่างของคุณประกอบด้วยหลายส่วนโดยพื้นฐาน:

คำสั่ง >> ชื่อไฟล์

ดังนั้นการส่งออกของจะได้รับการผนวกเข้ากับcommandfilename


เกิดอะไรขึ้นในกรณีเฉพาะของecho?

ในกรณีเฉพาะของคุณecho "…"คำสั่งจะส่งออกอาร์กิวเมนต์อินพุตเป็น "stdout" ซึ่งเรียกว่า "standard output descriptor" อาร์กิวเมนต์อินพุตที่echoจะตามด้วยขึ้นบรรทัดใหม่ ( \n) เพื่อให้คุณได้ตัวแบ่งบรรทัด

ในที่นี้ "ตัวอธิบายเอาต์พุตมาตรฐาน" ไม่ใช่อะไรมากไปกว่าเอาต์พุตสตรีมที่แสดงในเชลล์ของคุณเมื่อคุณดำเนินการคำสั่ง (นั่นคือเมื่อคุณพิมพ์echo fooและกด Enter foo\nคือผลลัพธ์จริงของechoคำสั่งซึ่งแสดงโดยเชลล์ของคุณfooตามด้วยขึ้นบรรทัดใหม่)

โดยทั่วไปสิ่งที่เขียนไปยังบรรทัดคำสั่งของคุณจะใช้ stdout นอกจากนี้ยังมีตัวบ่งชี้อื่นที่เรียกว่า "stderr" ซึ่งโดยทั่วไปจะใช้สำหรับข้อความแสดงข้อผิดพลาด นอกจากนี้ยังจะพิมพ์เหมือน stdout ดังนั้นบางครั้งอาจมีการสลับกัน และมี stdin descriptor ที่ใช้สำหรับอินพุต. ดูบทความนี้สำหรับข้อมูลเพิ่มเติม

คุณเปลี่ยนทิศทางเอาต์พุตในเชลล์อย่างไร

คุณสามารถเปลี่ยนเส้นทาง stdout ไปยัง file descriptor ได้ตลอดเวลาซึ่งคุณสามารถทำได้ด้วยตัวดำเนินการเหล่านี้:

  • >เปลี่ยนเส้นทางไปยัง file descriptor จะสร้างไฟล์หากไม่มีอยู่หรือหากมีอยู่แล้วให้ตัดทอนไฟล์ก่อนที่จะเขียน ไฟล์จะถูกเขียนทับด้วย stdout

  • >>ผนวกเข้ากับ file descriptor จะสร้างไฟล์หากไม่มีอยู่

คุณยังสามารถเปลี่ยนเส้นทาง stderr ได้โดยใช้2>หรือ2>>ในลักษณะที่คล้ายกัน หรือคุณสามารถรวม stderr และ stdout เป็นไฟล์เดียว: 2>&1ทำอย่างนั้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนเส้นทางและตัวอย่างเพิ่มเติมคุณสามารถอ่านบทแนะนำเล็ก ๆ นี้ได้

ฉันจะรู้ได้อย่างไรว่าความหมายของโค้ดเชลล์คืออะไร

โดยทั่วไปคุณอาจต้องการลองอธิบายhell.comซึ่งจะให้คำแนะนำที่เป็นภาพและข้อมูลเกี่ยวกับคำสั่งเชลล์เฉพาะ

7 MarkBoyce Jun 29 2018 at 09:58

สำหรับชาวTLDRที่ต้องการดูตัวอย่าง

เอาต์พุตมาตรฐาน (ไม่ใช่ข้อผิดพลาด) ของคำสั่งก่อน >> จะถูกเพิ่มที่ส่วนท้ายของไฟล์ที่ตั้งชื่อตาม

ดังนั้นหากไฟล์ "flintstones.txt" มี;

Fred
Barney

echo Dino >> flintstones.txt จะส่งผลให้มีการเพิ่ม 'Dino' ที่ท้ายไฟล์

Fred
Barney
Dino