コマンドの出力をクリップボードに直接コピーするにはどうすればよいですか?


529

ターミナルを使用しているときに、コマンドの出力をクリップボードにパイプして貼り付けるにはどうすればよいですか?例えば:

cat file | clipboard



:私はWindows上でのGit BashのからのUbuntuにログインする際の作業XCLIP得ることができないので、私は、関連する質問をしstackoverflow.com/q/60117294/470749
ライアン

1
ファイルの内容をクリップボードに保存します。apt install xclipおよびcat file | xclip -sel clip
EsmaeelE

回答:


598

私はいつもこれをやりたかったし、それを行うための素晴らしい簡単な方法を見つけました。他の誰かがそれを必要とする場合に備えて、私は完全な手順を書き留めました。

まず、次の名前の16 kBプログラムをインストールしxclipます。

sudo apt-get install xclip

次に、出力をxclipにパイプしてクリップボードにコピーできます。

cat file | xclip

コピーしたテキストを貼り付けるには、次のものを使用します。

xclip -o

人生を簡単にするために、私がしたように.bashrcファイルにエイリアスを設定できます:

alias "c=xclip"
alias "v=xclip -o"

これがいかに便利かを確認するために、新しいターミナルウィンドウで現在のパスを開くことを想像してみてください(システムによっては、Ctrl+のような方法もありますTが、これは単に説明のためです)。

Terminal 1:
pwd | c

Terminal 2:
cd `v`

` ` 周辺に注意してくださいv。これはv最初にコマンドとして実行され、次にcd使用するためにインプレースで置き換えられます。

コンテンツをXクリップボードにコピーするだけ

cat file | xclip

Xアプリケーション以外の場所に貼り付けたい場合は、次の方法を試してください。

cat file | xclip -selection clipboard

145
「catファイル| xclip」は、コンテンツを「X」クリップボードにコピーするだけです。「X」アプリケーション以外の場所に貼り付けたい場合は、次のコードを試してください。「catファイル| xclip -selectionクリップボード」
khotyn

5
ハンドルの選択は適切です!
マットジョイナー

4
あなたは直接の結果貼り付け、編集できるように改行文字を削除したい場合は、「障害者を| C」、あなたが行うことができます「PWDを| TR -d 『\ n』は| XCLIP -selection C」
Anake

12
また、システムクリップボードからのコピー/貼り付けを定義しalias "cs=xclip -selection clipboard"alias "vs=xclip -o -selection clipboard"簡単にする
Yibo Yang

1
sudoアクセスがなく、xclipがインストールされていないソリューションについてはどうですか?
DanGordon、2016年

179

OS Xでは、を使用しpbcopyます。pbpaste反対方向に行きます。

pbcopy < .ssh/id_rsa.pub

14
うん!exの場合は次のように:pbcopy < .ssh/id_rsa.pub
doublejosh

コマンド出力では機能しません-例pbcopy < git merge-base master some-branch
Ben

あなたはtmuxのを使用している場合、それは動作しません、あなたのセッションを再接続しない限り:superuser.com/a/413233/146254
Atav32

1
すでに作業している場合は、catを使用することもできます。cat file.txt | pbcopy
rtrigoso

3
私はコメントが5歳であることを知っていますが、将来誰かがこれに出くわした場合に備えて、コマンド出力で使用するには、次のようにしますgit merge-base master some-branch | pbcopy
Sam

62

Linux / OSX / Cygwin用のツールを作成しましたが、これらは他のツールと似ていますが、わずかに独特です。私はそれを呼び出しcbそれはこのgithub gistにあります。

その要点で、Linux、macOS、およびCygwinを使用してコマンドラインからコピーアンドペーストする方法を示します。

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

マックOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

注:私は当初、ボブ・イーノップの回答への私のコメントでこれを言及することを意図していました。しかし、私は自分の要点にREADMEを追加する必要があることに気付きました。gistエディターはMarkdownプレビューを提供していないため、ここで回答ボックスを使用し、それを私の要旨にコピー/貼り付けた後、「私は回答を送信することもできます」と述べました。

cb

クリップボードへの漏れ防止ティー

このスクリプトはモデル化されていますtee(を参照man tee)。

これは通常のコピーと貼り付けのコマンドに似ていますが、統一して、いつチェーン可能にしたいかを感知できます。

コピーする

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

ペースト

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

連鎖

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

ファイルリダイレクト経由でコピー

(年代順に、これを最後にデモすることは理にかなっています)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

これは、コマンド出力をmacOSのターミナルのクリップボードにコピーするのに最適でした、ありがとう!
Joshua Dyck

46

コピー/貼り付けコマンドから推測作業を取り除くこの小さなスクリプトを書きました。

Linuxバージョンのスクリプトは、システムにすでにインストールされているxclipに依存しています。スクリプトはクリップボードと呼ばれます。

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

スクリプトのOS Xバージョンは、すべてのMacにプリインストールされているpbcopyとpbpasteに依存しています。

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

clipboardこれらの2つの例に示すように、パイプを使用してパイプを使用するだけなので、スクリプトの使用は非常に簡単です。

$ cat file | clipboard

$ clipboard | less

3
私は名前を使用pbcopyし、pbpasteそれがLinuxとOS Xの両方のために働くように、Linux上で
StackedCrooked

スクリプトをubuntuでグローバルに機能させるには、次のように保存します。* bash ~/.scripts/clipboard で実行可能にしますchmod +x ~/.scripts/clipboard。* for fish export PATH=$PATH:~/.scriptsの末尾に~/.bashrc追加set PATH ~/.scripts $PATH~/.config/fish/fish.config ます。
ホッケー、

2
このスクリプトを関数としてラップclipboard(){ ... }し、.bashrcに貼り付けることもできます
Sebastian Nowak

これは私が作成したものと非常に似ていますが、のような連鎖を許可しますdate | cb | tee -a updates.log。これは、dateコマンド出力をクリップボードに送信し、tee -aそれをファイルに追加するコマンドに渡し、それをに渡しますstdout。しかし、それは「クリップボードへの漏れのないティー」のようなものdate | cbです。そして最後に、cb > file.txt gist.github.com / RichardBronosky /…
Bruno Bronosky 2017年

1つの提案-末尾の改行文字を削除して、貼り付け時にコマンドが実行されないようにします(たとえば、パスをコピーして貼り付ける場合)。コマンドxclip -i -selection clipboardを次のように変更しますxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

これをあなたに追加してください~/.bashrc

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

ここで、pペーストとcクリップコピーをクリップします。ただし、より手の込んだこともできます。

clipp | sed 's/^/    /' | cclip

↑クリップボードをインデントします。スタックオーバーフローの{ }ボタンがないサイトに適しています

これを実行して追加できます。

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc

使用例を教えてください
Ulf Aslak 2017年

7

私はParcelliteを使用していて、xsel最後のコミットメッセージをgitクリップボードマネージャーにコピーします(何らかの理由でxclip機能しません)。

$ git log -1 --pretty=%B | xsel -i -b

7

外部ツールを使用せずにサーバービューSSHに接続している場合、これは比較的簡単なコマンドです。

Windows 7以降のコマンドプロンプトから:

ssh user@server cat /etc/passwd | clip

これにより、リモートファイルのコンテンツがローカルクリップボードに配置されます。

(このコマンドでは、キーに対してPageantを実行する必要があります。そうしないと、パスワードの入力を求められます。)


1
@AfshinMoazami、タイトルと質問自体は一般的です。unixシステムのタグヒントのみです。私の回答は、UNIXサーバーからWindowsマシンに日付を取得しようとする場合をカバーしています。
d.raev 2015

1
はい、Powershellをローカルで操作するだけのWindows管理者に役立つため、賛成です(LSWでは実際に機能していますが、Powershellから直接bashにドロップして、そこから*ニキシーなことを実行できます)。
flith

DOSプロンプトでの作業とWindows 10 echo Hello World | clip

5

Macの場合、これはコマンドラインを使用して(クリップボードから)貼り付けを(クリップボードに)コピーする方法の例です

pwdコマンドの結果をクリップボードにコピー

$ pwd | pbcopy

クリップボードのコンテンツを次のように使用します

$ cd $(pbpaste)

3

xclipやxselを使用せずに、同様の機能を提供する小さなツールを作成しました。stdoutクリップボードにコピーされ、ターミナルに再度貼り付けることができます。見る:

https://sourceforge.net/projects/commandlinecopypaste/

このツールはXセッションを必要としないことに注意してください。クリップボードはターミナル内でのみ使用でき、Ctrl+V他のXウィンドウに貼り付けたり、マウスを中クリックする必要はありません。


3

xclipがインストールされているLinuxの場合:

xclip -selectionクリップボード<ファイル


2

以前の投稿に基づいて、私は以下に追加できる軽量のエイリアスソリューションになりました.bashrc

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

例:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29

1

私は、KDEのバックグラウンドを取り除いた出身でxclipxselやその他の凝ったものにアクセスできません。問題を悪化させるTCSH Konsoleを持っています。

必要条件: qdbus klipper xargs bash

bash実行可能ファイルを作成しますfoo.sh

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

注: TCSHは複数行の引数をサポートしていないため、これはbashである必要があります。

の後にTCSHエイリアスが続き.cshrcます。

alias clipboard xargs -0 /path/to/foo

説明:

xargs -0stdinを単一の引数にパイプします。この引数は、bash実行可能ファイルに渡されます。実行可能ファイルは、「copy to clipboard」リクエストをに送信klipperqdbusます。パイプ/dev/nullqdbus、コンソールに返された改行文字を出力しません。

使用例:

ls | clipboard

これにより、現在のフォルダーの内容がクリップボードにコピーされます。

注:パイプとしてのみ機能します。引数をコピーする必要がある場合は、bash実行可能ファイルを直接使用してください。


1

私は通常、次のコマンドをコピーする必要があるときにこのコマンドを実行しますssh-key

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v どこか他の。



0

Windowsシステム(LinuxのWindowsサブシステム(WSL)として知られている)にインストールされているbashを使用している場合、xclipを実行するとエラーが発生します。

Error: Can't open display: (null)

代わりに、LinuxサブシステムがWindows実行可能ファイルにアクセスできることを思い出してください。のようなclip.exeを使用することが可能です

echo hello | clip.exe

貼り付けコマンド(ctrl-v)を使用できます。


1
xserver(vcxsvrやxmingなど)がWindowsにインストールされていて、ディスプレイが起動していてxclipboardが実行されている場合、実際にはxclipをシームレスに使用できることに注意してください。
ビットバイト

0

エッジケースをカバーするためだけです:)そして質問タイトルはコマンドの出力を直接クリップボードにコピーする方法を(少なくとも今は)尋ねるからです。

コマンドの実行後にコマンドの出力をコピーすると便利なことがよくあります。コマンドを再度実行したくない、または実行できません。

このシナリオでは、gdmまたは同様のマウスユーティリティを使用して、マウスを使用して選択できます。apt-get install gdm右クリックするか、Cntrl + Shift + cとCntrl + Shift + vの組み合わせでターミナルにコピーして貼り付けます

または、これは私にとって推奨される方法です(複数のペインが並んでいて、複数の行を選択する必要がある場合、マウスは1つのペイン内で適切に選択できないため)tmuxを使用して、標準を使用してtmuxバッファーにコピーできます[、スペース、移動して選択、入力、またはコードブロックを選択できます。また、これは、tmuxのようなcliマルチプレクサーのレーンの1つにあり、行番号ではなくテキストの束を選択する必要がある場合に特に役立ちます(私のvimセットアップは行番号をレンダリングします)。

この後、次のコマンドを使用できます。

tmux保存バッファー-| xclip -i

もちろん、エイリアスを好きなものにエイリアスしたり、tmux設定ファイルに直接バインドしたりできます

これは、コマンドを再度実行できない場合に、このエッジケースをカバーするための概念的な回答を提供するためです。より具体的なコード例が必要な場合は、お知らせください

乾杯

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.