如何将远程命令的输出复制到本地剪贴板?

如何将远程命令的输出复制到本地剪贴板?

iTerm2在 Mac OS X 中使用它作为我的终端客户端。在本地系统上,我可以使用pbcopypbpaste在系统剪贴板和终端之间传输数据,但是当您通过 ssh 连接到另一台机器时,这当然不起作用。

有什么方法可以自动获取命令结果并将其复制到剪贴板吗?也许可以使用 applescript 来抓取窗口上的文本iTerm,然后获取倒数第二行?

例如,如果我想复制当前工作目录:

图片-48.png

我运行pwd,然后使用鼠标选择文本,然后按command + c

有没有更好/更快/自动化的方法来做到这一点?我不是在寻找一种适用于每个命令的万无一失的解决方案(例如:当有大量回滚时可能不起作用) - 我只是在寻找一些东西来使我经常做的这项任务不那么乏味。

更新

我正在研究如何使用screen它来做到这一点,但我仍然不确定是否可行。

答案1

好吧,我刚刚尝试了这个并且有效:

echo "foo" | tee | ssh [email protected] pbcopy

笔记:

  • 我正在使用echo "foo"它来替代您想要将其输出复制到ssh客户端机器的命令。
  • 我正在使用它tee,这样您就可以在终端窗口中直接看到它,而不是被命令全部吞噬ssh
  • 通过发出ssh运行命令,它会将收到的命令发送stdinssh另一台主机上的该命令,然后立即返回。

您可能可以将其别名为更易于输入的名称。并且务必使用ssh密钥而不是基于密码的身份验证,以免您不得不重新输入密码。更新:你可以使用SSH 代理转发因此您不必在远程设备上输入访问本地机器的凭证。

(注意:当您只有 ssh/tty/shell 会话而没有 Mac OS X GUI 上下文时,我不确定 pbcopy/pbpaste 的工作效果如何。我认为剪贴板是 NeXTStep/Cocoa/Aqua/GUI 概念,不一定存在于没有 GUI 层的 Unix 层。)

当我第一次想到这个时,它看起来有些黑客,但我玩得越多,就越喜欢它。

答案2

简单的解决方案

在你的 ssh remote.host 上创建/usr/local/bin/spbcopy

#!/bin/bash
cat >$HOME/.pastebin

在你的OSX上创建/usr/local/bin/spbpaste

#!/bin/bash
ssh $* 'cat .pastebin; >$_'

使用以下方法将数据复制到剪贴板:

[email protected]$ echo "foo" | spbcopy

并使用以下方法从剪贴板粘贴数据:

osx$ spbpaste [email protected]

您可能可以在远程主机上使用命名管道,并通过在后台运行某些命令自动将数据复制到本地剪贴板,但这会使设置变得更加复杂。

相关内容