Как я могу скопировать вывод удаленной команды в локальный буфер обмена?

Я использую iTerm2 в качестве моего терминального клиента в Mac OS X. В локальной системе я могу использовать pbcopy а также pbpaste для передачи данных между системным буфером обмена и терминалом, но, конечно, это не работает, когда вы подключены к другому компьютеру.

Есть ли способ, которым я могу взять результат команды и автоматически скопировать его в буфер обмена? Возможно яблочный скрипт, чтобы взять текст на iTerm окна, а затем получить следующую последнюю строку?

Например, если я хочу скопировать текущий рабочий каталог:

Picture-48.png

я бегу pwdзатем с помощью мыши выделите текст и нажмите command + c,

Есть ли лучший / быстрый / автоматический способ сделать это? Я не ищу пуленепробиваемое решение, которое бы работало для каждой команды (например, может не работать при огромном прокрутке) - я просто ищу что-то, чтобы сделать эту задачу, которую я делаю, довольно часто немного менее утомительной.

Обновить

Я смотрю на использование screen сделать это, но я все еще не уверен, возможно ли это.

2 ответа

Решение

Ну, я просто попробовал это, и это работает:

echo "foo" | tee | ssh YourUsername@your.ssh.client.host pbcopy

Заметки:

  • я использую echo "foo" в качестве замены для команды, вывод которой вы хотите скопировать в свой ssh клиентская машина.
  • я использую tee так что вы можете увидеть его прямо в окне вашего терминала вместо того, чтобы проглотить все это ssh команда.
  • Давая ssh команда для запуска, он отправит stdin тот ssh получил эту команду на другом хосте, а затем сразу же вернулся.

Вы могли бы, вероятно, псевдоним это что-то более простое для ввода. И обязательно используйте ssh ключи вместо аутентификации на основе пароля, чтобы избавить себя от необходимости повторного ввода пароля. Обновление: и вы можете использовать SSH Agent Forwarding, чтобы вам не нужно было вводить учетные данные для доступа к вашему локальному компьютеру на удаленном компьютере.

(Примечание: я не уверен, насколько хорошо работает pbcopy/pbpaste, когда у вас есть только сеанс ssh/tty/shell и нет контекста графического интерфейса Mac OS X. Я думаю, что монтажная панель - это концепция NeXTStep/Cocoa/Aqua/GUI, не обязательно то, что выходит на уровне Unix без уровня GUI.)

Когда я впервые придумал это, это казалось хакерским, но чем больше я играю с этим, тем больше оно мне нравится.

Упрощенное решение

На вашем ssh remote.host создайте /usr/local/bin/spbcopy:

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

На тебе OSX создай /usr/local/bin/spbpaste:

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

Скопируйте данные в буфер обмена, используя:

user@remote.host$ echo "foo" | spbcopy

И вставьте данные из буфера обмена, используя:

osx$ spbpaste user@remote.host

Вероятно, вы можете использовать именованный канал на удаленном хосте и автоматически скопировать данные в локальный буфер обмена, выполнив некоторую команду в фоновом режиме, но это усложняет настройку.

Другие вопросы по тегам