วิธีที่ง่ายที่สุดในการต่อท้ายข้อความเข้ากับไฟล์ใน 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.txt
cannot 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' >>
จะต่อท้าย! ขอบคุณ