หลายคนคงเคยเห็นคำสั่งที่ให้คุณเขียนไฟล์ที่ต้องการการอนุญาตรูทถึงแม้ว่าคุณจะลืมเปิด vim ด้วย sudo:
:w !sudo tee %
สิ่งคือฉันไม่ได้รับสิ่งที่เกิดขึ้นตรงนี้
ฉันคิดแล้ว:
 wสำหรับสิ่งนี้
                                                        *:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
                        Execute {cmd} with [range] lines as standard input
                        (note the space in front of the '!').  {cmd} is
                        executed like with ":!{cmd}", any '!' is replaced with
                        the previous command |:!|.
ดังนั้นจึงผ่านทุกบรรทัดเป็นอินพุตมาตรฐาน
!sudo teeส่วนสายteeที่มีสิทธิ์ผู้ดูแลระบบ
สำหรับทุกคนที่จะทำให้ความรู้สึก%ควรออกชื่อไฟล์ (เป็นพารามิเตอร์สำหรับtee) แต่ฉันไม่สามารถหาการอ้างอิงเกี่ยวกับความช่วยเหลือสำหรับพฤติกรรมนี้
tl; drมีใครช่วยฉันตัดคำสั่งนี้ออกไหม
sudoจะใช้กับcatแต่>ไม่อนุญาตดังนั้นจึงไม่อนุญาต คุณสามารถลองใช้คำสั่งทั้งหมดใน subshell sudo เช่น:w !sudo sh -c "cat % > yams.txt"แต่ที่ไม่ทำงานอย่างใดอย่างหนึ่งเพราะใน subshell %เป็นศูนย์; คุณจะลบเนื้อหาในไฟล์ของคุณออก
                :w !sudo sh -c "cat >%"ใช้งานได้จริงเช่นเดียวกับsudo tee %เพราะ Vim ใช้แทนชื่อไฟล์%ก่อนที่มันจะเข้าสู่ subshell อย่างไรก็ตามทั้งคู่ไม่ทำงานหากชื่อไฟล์มีช่องว่างอยู่ คุณต้องทำ:w !sudo sh -c "cat >'%'"หรือ:w !sudo tee "%"แก้ไข
                
:w !sudo cat > %ไม่ทำงานเช่นกันและไม่ก่อมลพิษเอาท์พุทมาตรฐาน?