web-dev-qa-db-ja.com

リモートコマンドからの出力をローカルクリップボードにコピーするにはどうすればよいですか?

Mac OSXのターミナルクライアントとしてiTerm2を使用しています。ローカルシステムでは、pbcopypbpasteを使用して、システムクリップボードとターミナル間でデータを転送できますが、もちろんです。別のマシンにSSH接続している場合、これは機能しません。

コマンドの結果を取得してクリップボードに自動的にコピーする方法はありますか?おそらく、iTermウィンドウのテキストを取得し、最後から2番目の行を取得するためのAppleScriptですか?

たとえば、現在の作業ディレクトリをコピーしたい場合:

Picture-48.png

pwdを実行し、マウスを使用してテキストを選択し、command + cを押します。

これを行うためのより良い/より速い/自動の方法はありますか?私はすべてのコマンドで機能する防弾ソリューションを探していません(たとえば、大きなスクロールバックがあると機能しない可能性があります)-私はこのタスクを行うための何かを探しています。

更新

screenを使用してこれを行うことを検討していますが、それが可能かどうかはまだわかりません。

6
cwd

まあ、私はこれを試したところ、うまくいきました:

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

ノート:

  • 出力をsshクライアントマシンにコピーするコマンドの代用としてecho "foo"を使用しています。
  • 私はteeを使用しているので、sshコマンドですべてを飲み込むのではなく、ターミナルウィンドウで直接表示できます。
  • sshに実行するコマンドを与えることにより、stdinが受信したsshを他のホスト上のそのコマンドに送信し、すぐに戻ります。

おそらく、入力が簡単なものにエイリアスすることができます。また、パスワードベースの認証の代わりにsshキーを使用して、パスワードを再入力する手間を省いてください。 更新:そして SSHエージェント転送 を使用できるので、ローカルマシンにアクセスするために資格情報を入力する必要はありませんリモートボックス。

(注:ssh/tty/Shellセッションのみがあり、Mac OS X GUIコンテキストがない場合、pbcopy/pbpasteがどの程度うまく機能するかわかりません。ペーストボードはNeXTSTEP/Cocoa /だと思います。 Aqua/GUIの概念であり、必ずしもGUIレイヤーなしでUnixレイヤーに存在するものではありません。)

私が最初にこれを思いついたとき、それはハックのように見えました、しかし私がそれで遊ぶほど、私はそれが好きになります。

2
Spiff

単純な解決策

Sshremote.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]

リモートホストで名前付きパイプを使用し、バックグラウンドでコマンドを実行することでデータをローカルクリップボードに自動的にコピーできますが、セットアップがさらに複雑になります。

0
brablc