วิธีที่ง่ายที่สุดในการต่อท้ายข้อความเข้ากับไฟล์ใน Linux คืออะไร?
ฉันได้ดูคำถามนี้แล้ว แต่คำตอบที่ยอมรับนั้นใช้โปรแกรมเพิ่มเติม ( sed) ฉันแน่ใจว่าควรมีวิธีที่ง่ายกว่าechoหรือคล้ายกัน
วิธีที่ง่ายที่สุดในการต่อท้ายข้อความเข้ากับไฟล์ใน Linux คืออะไร?
ฉันได้ดูคำถามนี้แล้ว แต่คำตอบที่ยอมรับนั้นใช้โปรแกรมเพิ่มเติม ( sed) ฉันแน่ใจว่าควรมีวิธีที่ง่ายกว่าechoหรือคล้ายกัน
คำตอบ:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
โดยพื้นฐานแล้วคุณสามารถถ่ายโอนข้อความที่คุณต้องการลงในไฟล์ได้ CTRL-D ส่งสัญญาณ end-of-file ซึ่งจะยกเลิกอินพุตและส่งกลับคุณไปที่เชลล์
sudo !!- ซึ่งเรียกใช้คำสั่งสุดท้ายโดยมีการsudoต่อท้าย ฉันเพิ่งค้นพบว่าสิ่งนี้ใช้ได้กับnanoฯลฯ (โดยบังเอิญพยายามnano nano auth... )
!!มาก่อนน่ากลัว บ่อยครั้งที่ฉันทำในสิ่งที่ชอบcat /var/log/apache/error.logและถูกปฏิเสธการอนุญาต นอกจากนี้ยังสามารถทำได้ด้วย id จาก history เช่นsudo !1419สิ่งนี้จะดำเนินการคำสั่งที่บรรทัด1419ในประวัติเป็น sudo
เกี่ยวกับ:
echo "hello" >> <filename>
การใช้ตัว>>ดำเนินการจะต่อท้ายข้อมูลที่ส่วนท้ายของไฟล์ในขณะที่การใช้>จะเขียนทับเนื้อหาของไฟล์หากมีอยู่แล้ว
คุณสามารถใช้printfในลักษณะเดียวกัน:
printf "hello" >> <filename>
โปรดทราบว่าการใช้ข้างต้นอาจเป็นอันตรายได้ ตัวอย่างเช่นหากคุณมีไฟล์อยู่แล้วและต้องการต่อท้ายข้อมูลที่ท้ายไฟล์และคุณลืมใส่ข้อมูลสุดท้าย>ทั้งหมดในไฟล์จะถูกทำลาย คุณสามารถเปลี่ยนพฤติกรรมนี้ได้โดยตั้งค่าnoclobberตัวแปรใน.bashrc:
set -o noclobber
ตอนนี้เมื่อคุณพยายามที่จะทำคุณจะได้รับการเตือนว่าecho "hello" > file.txtcannot overwrite existing file
ในการบังคับเขียนไฟล์ตอนนี้คุณต้องใช้ไวยากรณ์พิเศษ:
echo "hello" >| <filename>
คุณควรทราบด้วยว่าโดยค่าเริ่มต้นechoจะเพิ่มอักขระบรรทัดใหม่ต่อท้ายซึ่งสามารถระงับได้โดยใช้-nแฟล็ก:
echo -n "hello" >> <filename>
อ้างอิง
catแต่คุณควรระมัดระวังและใช้>>แทน>!
sudo rm -r /=)
sudo rm -r /กว่าsudo rm -rf /! ^ _ ^ มีการตั้งค่าสถานะที่จะขอการยืนยันก่อนที่จะเขียนทับเนื้อหาของไฟล์ที่มีอยู่>หรือไม่? การใช้นามแฝงว่าเพื่อใช้ธงดังกล่าวเสมอดูเหมือนจะเป็นความคิดที่ดี
set -o noclobberในของคุณ.bashrcแล้วคุณจะไม่สามารถเขียนทับไฟล์ที่มีอยู่โดยไม่ต้องใช้ไวยากรณ์พิเศษecho "hello" >| <filename>
วิธีอื่นที่เป็นไปได้คือ:
echo "text" | tee -a filename >/dev/null
-aจะผนวกในตอนท้ายของแฟ้ม
หากจำเป็นsudoให้ใช้:
echo "text" | sudo tee -a filename >/dev/null
>/dev/nullที่ป้องกันไม่ให้ท้าย "ข้อความ" ที่จะแสดงในคอนโซลของคุณ
ติดตามเพื่อรับคำตอบที่ยอมรับ
คุณจำเป็นต้องมีสิ่งอื่นที่ไม่ใช่CTRL-D ที่จะกำหนดให้สิ้นสุดถ้าใช้ในสคริปต์ ลองสิ่งนี้แทน:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
การดำเนินการนี้จะต่อท้ายข้อความในไฟล์ที่ระบุ (ไม่รวม "EOF")
มันใช้ที่นี่เอกสาร (หรือ heredoc)
อย่างไรก็ตามหากคุณต้องการ sudo เพื่อต่อท้ายไฟล์ที่ระบุคุณจะประสบปัญหาในการใช้ heredoc เนื่องจากการเปลี่ยนเส้นทาง I / O หากคุณพิมพ์โดยตรงบนบรรทัดคำสั่ง
รูปแบบนี้จะทำงานเมื่อคุณพิมพ์โดยตรงบนบรรทัดคำสั่ง:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
หรือคุณสามารถใช้teeแทนเพื่อหลีกเลี่ยงปัญหา sudo บรรทัดคำสั่งที่พบเมื่อใช้ heredoc กับ cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >มาหลายปีแล้วไม่รู้cat << 'EOF' >>จะต่อท้าย! ขอบคุณ