第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

vim“使用sudo編寫”技巧如何工作?

vim“使用sudo編寫”技巧如何工作?

心有法竹 2019-11-21 10:16:40
你們中許多人可能已經(jīng)看到了允許您在需要root權(quán)限的文件上寫命令的命令,即使您忘記使用sudo打開vim時也是如此::w !sudo tee %問題是我不明白這里到底發(fā)生了什么。我已經(jīng)想通了: 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 |:!|.因此它將所有行作為標(biāo)準(zhǔn)輸入傳遞。該!sudo tee零件tee具有管理員權(quán)限。為了使所有人都理解,%應(yīng)該輸出文件名(作為的參數(shù)tee),但是我找不到關(guān)于此行為的幫助參考。tl; dr有人可以幫我剖析此命令嗎?VIM 須藤
查看完整描述

3 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個贊

在:w !sudo tee %...


% 表示“當(dāng)前文件”

正如eugene y所指出的,%確實(shí)的意思是“當(dāng)前文件名”,將其傳遞給tee它,以便它知道要覆蓋哪個文件。


(在替換命令,這是略有不同;如:help :%所示,它是equal to 1,$ (the entire file)(感謝@Orafu的指出,這并不評估為文件名)。例如,。:%s/foo/bar意思是“ 在當(dāng)前文件,替換的出現(xiàn)foo與bar”如果你亮點(diǎn)鍵入一些文本之前:s,您會看到突出顯示的行取代了%您的替換范圍。)


:w 沒有更新您的文件

此技巧的一個令人困惑的部分是,您可能會認(rèn)為:w正在修改文件,但事實(shí)并非如此。如果您打開并修改了file1.txt,然后運(yùn)行:w file2.txt,那將是“另存為”;file1.txt不會被修改,但是當(dāng)前緩沖區(qū)的內(nèi)容將發(fā)送到file2.txt。


相反file2.txt,您可以替代shell命令來接收緩沖區(qū)內(nèi)容。例如,:w !cat將僅顯示內(nèi)容。


如果Vim不是使用sudo訪問運(yùn)行的,則它:w不能修改受保護(hù)的文件,但是如果將緩沖區(qū)內(nèi)容傳遞給shell,則可以使用sudo運(yùn)行shell 中的命令。在這種情況下,我們使用tee。


理解三通

至于tee,tee在正常的bash管道情況下,將命令描述為T形管道:它將輸出定向到指定的文件,并將其發(fā)送到標(biāo)準(zhǔn)輸出,該命令可以由下一個管道命令捕獲。


例如,在中ps -ax | tee processes.txt | grep 'foo',進(jìn)程列表將被寫入文本文件并傳遞給grep。


     +-----------+    tee     +------------+

     |           |  --------  |            |

     | ps -ax    |  --------  | grep 'foo' |

     |           |     ||     |            |

     +-----------+     ||     +------------+

                       ||   

               +---------------+

               |               |

               | processes.txt |

               |               |

               +---------------+

(使用Asciiflow創(chuàng)建的圖。)


有關(guān)更多信息,請參見tee手冊頁。


發(fā)球臺

在您的問題描述的情況下,使用teehack是因?yàn)槲覀兒雎粤怂龅囊话?。sudo tee寫入文件,還將緩沖區(qū)內(nèi)容發(fā)送到標(biāo)準(zhǔn)輸出,但是我們忽略標(biāo)準(zhǔn)輸出。在這種情況下,我們不需要將任何內(nèi)容傳遞給另一個管道命令。我們只是將其tee用作寫入文件的另一種方式,因此可以使用來調(diào)用它sudo。


使這個技巧變得容易

您可以將其添加到您的工具中.vimrc以使其易于使用:只需鍵入:w!!。


" Allow saving of files as sudo when I forgot to start vim using sudo.

cmap w!! w !sudo tee > /dev/null %

該> /dev/null部分顯式丟棄了標(biāo)準(zhǔn)輸出,因?yàn)檎缥宜f,因?yàn)槲覀儾恍枰獙⑷魏蝺?nèi)容傳遞給另一個管道命令。


查看完整回答
反對 回復(fù) 2019-11-21
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個贊

在執(zhí)行的命令行中,%代表當(dāng)前文件名。記錄在:help cmdline-special:


In Ex commands, at places where a file name can be used, the following

characters have a special meaning.

        %       Is replaced with the current file name.

如您所知:w !cmd,將當(dāng)前緩沖區(qū)的內(nèi)容傳遞給另一個命令。是什么tee做的是標(biāo)準(zhǔn)輸入復(fù)制到一個或多個文件,也到標(biāo)準(zhǔn)輸出。因此,在成為root的同時:w !sudo tee % > /dev/null有效地將當(dāng)前緩沖區(qū)的內(nèi)容寫入當(dāng)前文件??梢杂糜诖四康牡牧硪粋€命令是:dd


:w !sudo dd of=% > /dev/null

作為快捷方式,您可以將此映射添加到您的.vimrc:


" Force saving files that require root permission 

cnoremap w!! w !sudo tee > /dev/null %

通過上面的命令,您可以鍵入:w!!<Enter>將文件另存為root。


查看完整回答
反對 回復(fù) 2019-11-21
  • 3 回答
  • 0 關(guān)注
  • 894 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號