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