ฉันเจอคำสั่งที่ได้รับด้านล่าง -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
จากสิ่งที่ฉันเดาได้มันอาจจะใช้สำหรับการยอมรับการเปลี่ยนแปลงใน. bash_profile แต่มันจะใช้อะไรกันแน่
ฉันเจอคำสั่งที่ได้รับด้านล่าง -
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
จากสิ่งที่ฉันเดาได้มันอาจจะใช้สำหรับการยอมรับการเปลี่ยนแปลงใน. bash_profile แต่มันจะใช้อะไรกันแน่
คำตอบ:
มันเปลี่ยนเส้นทาง stdout ของโปรแกรมก่อน>>
และผนวกเข้ากับไฟล์ที่กำหนดหลังจาก
>> file command
echo a b >> c d
จะผนวกไปยังไฟล์ที่ชื่อว่าa b d
c
>>
ทำอะไร?ด้วย>>
คุณผนวกเอาท์พุทของคำสั่งไปยังไฟล์
คำสั่งตัวอย่างของคุณประกอบด้วยหลายส่วนโดยทั่วไป:
คำสั่ง >> ชื่อไฟล์
ดังนั้นผลลัพธ์ของcommand
จะถูกผนวกเข้าfilename
ด้วย
echo
?ในกรณีเฉพาะของคุณecho "…"
คำสั่งจะส่งเอาต์พุตอาร์กิวเมนต์อาร์กิวเมนต์ไปที่“ stdout” ซึ่งเป็นชื่อที่เรียกว่า“ standard output descriptor” อาร์กิวเมนต์อินพุตที่echo
จะตามด้วย newline ( \n
) เพื่อให้คุณได้รับการขึ้นบรรทัดใหม่
ที่นี่“ descriptor เอาต์พุตมาตรฐาน” ไม่มีอะไรมากไปกว่าสตรีมเอาต์พุตที่แสดงในเชลล์ของคุณเมื่อคุณรันคำสั่ง (นั่นคือเมื่อคุณพิมพ์echo foo
และกด Enter foo\n
เป็นเอาต์พุตจริงของecho
คำสั่งซึ่งแสดงโดยเชลล์ของคุณfoo
ตามด้วยบรรทัดใหม่)
โดยทั่วไปสิ่งใดก็ตามที่เขียนไปยังบรรทัดคำสั่งของคุณกำลังใช้ stdout นอกจากนี้ยังมี descriptor อื่นที่เรียกว่า“ stderr” ซึ่งโดยทั่วไปจะใช้สำหรับข้อความแสดงข้อผิดพลาด มันจะถูกพิมพ์เหมือน stdout ดังนั้นบางครั้งพวกเขาอาจสลับกัน และมีตัวบ่งชี้ stdin ที่ใช้สำหรับอินพุต ดูบทความนี้สำหรับข้อมูลเพิ่มเติม
คุณสามารถเปลี่ยนเส้นทาง stdout ไปยัง file descriptor ซึ่งคุณสามารถทำได้กับหนึ่งในโอเปอเรเตอร์เหล่านี้:
>
เปลี่ยนเส้นทางไปยังไฟล์อธิบาย มันจะสร้างไฟล์หากไม่มีอยู่หรือถ้ามีอยู่แล้วให้ตัดไฟล์ก่อนที่จะเขียน ไฟล์จะถูกเขียนทับด้วย stdout
>>
ต่อท้ายไฟล์ descriptor มันจะสร้างไฟล์หากไม่มีอยู่
นอกจากนี้คุณยังสามารถเปลี่ยนเส้นทาง stderr โดยใช้2>
หรือ2>>
คล้ายกัน หรือคุณสามารถรวม stderr และ stdout เป็นไฟล์เดียว: 2>&1
ทำเช่นนั้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนเส้นทางและตัวอย่างเพิ่มเติมคุณสามารถอ่านบทแนะนำเล็ก ๆนี้
โดยทั่วไปคุณอาจต้องลองใช้คำอธิบายเชลล์เชลล์ซึ่งจะให้คำแนะนำและข้อมูลเกี่ยวกับคำสั่งเชลล์
สำหรับคนTLDRที่ต้องการดูตัวอย่าง
เอาต์พุตมาตรฐาน (ไม่ใช่ข้อผิดพลาด) ของคำสั่งก่อน >> จะถูกเพิ่มไปยังจุดสิ้นสุดของไฟล์ที่ตั้งชื่อตาม
ดังนั้นหากไฟล์ "flintstones.txt" มี;
Fred
Barney
echo Dino >> flintstones.txt
จะส่งผลให้มีการเพิ่ม 'Dino' ไว้ท้ายไฟล์
Fred
Barney
Dino
echo Dino > flintstones.txt
การแสดงเนื้อหาของมันจะเป็นเพียงDino
ถ้าทำด้วยลูกศรขวาเดียว
อีกครั้งถ้าคุณทำ
> somefile.txt
เนื้อหาทั้งหมดของไฟล์จะถูกล้าง
> file
ล้างไฟล์ แต่>> file
ไม่ทำอะไรเลย
man bash
เขียนด้วยภาษาที่ค่อนข้างเป็นทางการมันอาจจะยากที่จะเข้าใจ ในทางกลับกันวลีbash >>
จะส่งคืนลิงก์ที่มีประโยชน์น้อยใน Google เป็นเรื่องจริงที่เราต้องการรวบรวมความรู้โดยไม่ต้องพึ่ง Google ด้วยเหตุนี้แม้แต่คำถามที่มีคำตอบที่ค้นหาได้ง่ายอาจเหมาะสม อย่างไรก็ตามความจริงที่คุณไม่ได้ให้คำตอบทันที (ดูฉันจะตอบคำถามของฉันเองได้อย่างไร ) หรือชี้ไปยังแหล่งข้อมูลที่มีอยู่ (ซึ่งคุณอาจต้องการความช่วยเหลือในการเข้าใจ) บ่งชี้ว่าการวิจัยขาด