新聞中心
使用 macOS 的同學(xué),應(yīng)該熟悉一個(gè)命令pbcopy,它可以在命令行中把一段內(nèi)容寫(xiě)入到剪貼板,例如:

- echo "kingname" | pbcopy
就能把字符串kingname復(fù)制到剪貼板里面。我們也可以使用這個(gè)方法把一個(gè)文件中的內(nèi)容寫(xiě)入到剪貼板:
- cat xxx.txt | pbcopy
這樣我們就不需要把文件打開(kāi)再手動(dòng)復(fù)制的。
有時(shí)候,我要把服務(wù)器上面的日志復(fù)制下來(lái)。原來(lái)都是進(jìn)入服務(wù)器以后,用 vim 打開(kāi)日志文件,用鼠標(biāo)選中再?gòu)?fù)制。且不說(shuō)服務(wù)器是 Linux,沒(méi)有pbcopy這個(gè)命令,即使有這個(gè)命令,服務(wù)器上又怎么能訪(fǎng)問(wèn)本地的剪貼板呢?
在網(wǎng)上一搜,竟然還真有辦法。使用OSC52實(shí)現(xiàn)iTerm2遠(yuǎn)程pbcopy - 風(fēng)雪之隅[1]這篇文章借助 iterms 的一個(gè)功能和幾個(gè)特殊的字符,通過(guò) php 實(shí)現(xiàn)了這個(gè)功能。我們來(lái)把它改寫(xiě)成 Python 版本。
首先打開(kāi) iterms 的設(shè)置,把方框框住的這一項(xiàng)勾上:
然后,在 iterms 里面,通過(guò) ssh 連上服務(wù)器。
然后,我們來(lái)寫(xiě)一段 Python 代碼:
- import base64
- print('\033]52;c;' + base64.b64encode('青南'.encode()).decode() + '\007')
然后在服務(wù)器上運(yùn)行這段代碼,運(yùn)行效果如下圖所示:
什么都沒(méi)有打印出來(lái)?但不要擔(dān)心,現(xiàn)在,你隨便找一個(gè)可以打字的輸入框,按下鍵盤(pán)上面的Command +V鍵。你會(huì)發(fā)現(xiàn),青南兩個(gè)字竟然被粘貼出來(lái)了!
有了這個(gè)機(jī)制,我們就來(lái)人工寫(xiě)一個(gè)pbcopy.py,接收管道的輸入:
其中,#! /usr/bin/python3是遠(yuǎn)程服務(wù)器上面 Python 的地址。你可以通過(guò)命令which python3找到這個(gè)地址。
保存完成以后,給他添加可執(zhí)行權(quán)限:chmod +x pbcopy.py。
現(xiàn)在,我們?cè)囈辉嚢堰h(yuǎn)程的多行文本復(fù)制到本地的剪貼板中:
我這里復(fù)制的就是這個(gè)代碼自身。大家也可以使用其他文件來(lái)測(cè)試。復(fù)制完成以后,我們隨便找個(gè)地方粘貼,發(fā)現(xiàn)復(fù)制成功!
現(xiàn)在,我們使用軟連接,把這個(gè)可執(zhí)行文件變得更像命令一些:
- sudo ln -s /home/ubuntu/pbcopy.py /usr/bin/pbcopy
運(yùn)行效果如下圖所示:
完美滿(mǎn)足要求。
需要注意的是,這個(gè)程序會(huì)把管道輸入的所有內(nèi)容全部接收完成以后才會(huì)復(fù)制,所以,如果你輸入的文本內(nèi)容太大,可能會(huì)撐爆內(nèi)存。
網(wǎng)站名稱(chēng):在ssh里面把服務(wù)器的文本復(fù)制到本地電腦
標(biāo)題來(lái)源:http://www.dlmjj.cn/article/cocsccc.html


咨詢(xún)
建站咨詢(xún)
