සුඩෝ සමඟ vim විවෘත කිරීමට ඔබට අමතක වූ විට පවා, මූල අවසරය අවශ්ය ගොනුවක ලිවීමට ඔබට ඉඩ දෙන විධානය ඔබ බොහෝ දෙනෙක් දැක ඇති:
: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
, නමුත් එසේ නොවේ >
, එබැවින් එයට අවසර නැත. ඔබට සම්පූර්ණ විධානයම සුඩෝ උප කුලකයකින් ධාවනය කිරීමට උත්සාහ කළ හැකිය :w !sudo sh -c "cat % > yams.txt"
, නමුත් එය ක්රියා නොකරනු ඇත, මන්ද උපසිරැසියෙහි %
එය නිල් ය; ඔබ ඔබේ ගොනුවේ අන්තර්ගතය හිස් කරයි.
:w !sudo sh -c "cat >%"
ඇත්ත වශයෙන්ම ක්රියා sudo tee %
කරන්නේ Vim විසින් ගොනු නාමය උපසෙල් වෙත %
පැමිණීමට පෙර ආදේශ කරන බැවිනි . කෙසේ වෙතත්, ගොනු නාමයේ අවකාශයක් තිබේ නම් ඒ දෙකම ක්රියා නොකරයි; ඔබ කළ යුත්තේ :w !sudo sh -c "cat >'%'"
හෝ :w !sudo tee "%"
එය නිවැරදි කිරීමයි.
:w !sudo cat > %
ක්රියා නොකරනු ඇති අතර සම්මත ප්රතිදානය දූෂණය නොකරන්නේද?