經常使用vim忘記了不是root , 而提示沒有寫入權限的情況,所以查詢一下,相關命令是:
:w !sudo tee %
那么這條命令是如何理解的呢?
首先 ,vim 寫入文件是
:w [文件名]
這里的文件名也可以是設備,比如 /dev/stdin /dev/stdout
我們沒有權限,先把內容寫到 `/dev/stdin` ,
其次 理解tee的含義,就是把從 stdin 讀取的內容重定向到某一個文件,類似於 `>>` 符號,但 你無法使用 `sudo >>` ,所以 tee 是 >或 >> 的一個替代命令, >和>> 或者< 和<< 根本不是命令,
所以 sudo tee [文件名],就是從標准stdin 來寫入到[文件名]。
在vim 命令模式下, `%` 就是 當前的文件名,是一個當前文件名的快速替換品,或者說是環境變量也可以。
`sudo tee %` 就是 把內容寫入到當前文件。
所以 合並兩面兩點,vim 先寫入到 一個能返回 stdin 的命令,這個命令就是 sudo tee % , 為了調用這個命令,前面加一個感嘆號
如果換成shell,其實上面的命令就是
echo ${文件_Buff} | sudo tee ${文件名}
這樣就能解釋並記住這個命令了:
:w !sudo tee %
理解tee的含義,就是把從 stdin 讀取的內容重定向到某一個文件,類似於 `>>` 符號,但 你無法使用 `sudo >>` ,所以 tee 是 >或 >> 的一個替代命令, >和>> 或者< 和<< 根本不是命令,