많은 사람들이 sudo로 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
되지만에 적용 >
되지 않으므로 허용되지 않습니다. sudo 서브 쉘에서 전체 명령을 실행할 수는 :w !sudo sh -c "cat % > yams.txt"
있지만 서브 쉘에서는 %
nil 이기 때문에 작동하지 않습니다 . 파일 내용을 비 웁니다.
:w !sudo sh -c "cat >%"
실제로 작동합니다 . 그러나 파일 이름에 공백이 있으면 둘 다 작동하지 않습니다. 그렇게 하거나 고쳐야합니다. sudo tee %
%
:w !sudo sh -c "cat >'%'"
:w !sudo tee "%"
:w !sudo cat > %
잘 작동하지 않고 표준 출력을 오염시키지 않습니까?