หลายคนคงเคยเห็นคำสั่งที่ให้คุณเขียนไฟล์ที่ต้องการการอนุญาตรูทถึงแม้ว่าคุณจะลืมเปิด 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 > %
ไม่ทำงานเช่นกันและไม่ก่อมลพิษเอาท์พุทมาตรฐาน?