ターミナルを使用しているときに、コマンドの出力をクリップボードにパイプで貼り付けて戻す方法を教えてください。例えば:
cat file | clipboard
私はいつもこれをやりたかったし、それをするための素晴らしいそして簡単な方法を見つけました。他の誰かがそれを必要とする場合に備えて、私は完全な手順を書き留めました。
最初にxclip
という16kBのプログラムをインストールします。
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
OS Xでは、pbcopy
を使用してください。 pbpaste
は反対方向に進みます。
私はLinux/OSX/Cygwin用のツールを作成しました。これらのツールは、他のものと似ていますが、わずかにユニークです。私はそれをcb
と呼び、 このgithub Gistにあります 。
その要旨の中で、私はLinux、macOS、そしてCygwinを使ってコマンドラインでコピー&ペーストする方法を説明します。
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
注:私はもともと Bob Enohpの答え への私のコメントでこれを言及するつもりでした。しかし、それから私はGistにREADMEを追加する必要があることに気付きました。 GistエディタはMarkdownプレビューを提供していないので、ここで答えボックスを使用し、それをコピーしてGistに貼り付けた後、「答えを送信してもよい」と考えました。
このスクリプトは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
この小さなスクリプトを書いて、コピー/貼り付けコマンドから推測作業を取り除きます。
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
この2つの例に示すように、スクリプトを使用するのは非常に簡単です。clipboard
からパイプインまたはパイプラインアウトするだけなので。
$ cat file | clipboard
$ clipboard | less
これをあなたの~/.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
私はParcelliteとxsel
を使用して、最後のコミットメッセージをgit
から私のクリップボードマネージャにコピーしています(何らかの理由でxclip
が機能しません)。
$ git log -1 --pretty=%B | xsel -i -b
SSHをサーバービューに接続している場合は、外部ツールを使用せずに比較的簡単なコマンドです。
Windows 7以降のコマンドプロンプトから:
ssh user@server cat /etc/passwd | clip
これにより、リモートファイルの内容がローカルのクリップボードに保存されます。
(このコマンドでは、キーにPageantを実行する必要があります。そうしないと、パスワードの入力が求められます。)
XclipがインストールされているLinuxの場合:
xclip -selectionクリップボード<ファイル
Xclipやxselを使わずに、似たような機能を提供する小さなツールを作りました。 stdout
はクリップボードにコピーされ、端末に再度貼り付けることができます。見る:
https://sourceforge.net/projects/commandlinecopypaste/
このツールはXセッションを必要としないことに注意してください。クリップボードは端末内で使用することができるだけで、貼り付ける必要はありません。 Ctrl+V または他のXウィンドウを中マウスクリックします。
Windowsシステムにインストールされたbash(Linux用のWindowsサブシステム(WSL)と呼ばれる)を使用している場合、xclipを実行しようとするとエラーが発生します。
Error: Can't open display: (null)
代わりに、linuxサブシステムがWindows実行可能ファイルにアクセスできることを思い出してください。それはのようなclip.exeを使用することは可能です
echo hello | clip.exe
これにより、貼り付けコマンド(ctrl-v)を使用できます。
私はKDEのバックグラウンドを落としてきたので、xclip
、xsel
、その他の派手なものにアクセスできません。さらに悪いことに私はTCSH Konsoleを持っています。
必要条件:qdbus
klipper
xargs
bash
Bash実行可能ファイルfoo.sh
を作成します。
#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null
注: TCSHは複数行の引数をサポートしていないため、これはbashである必要があります。
.cshrc
の中にTCSHの別名が続きます。
alias clipboard xargs -0 /path/to/foo
説明:
xargs -0
は標準入力を単一の引数に渡します。この引数は、klipper
を使用して「クリップボードにコピー」要求をqdbus
に送信するbash実行可能ファイルに渡されます。 /dev/null
へのパイプは、qdbus
から返された改行文字をコンソールに表示しないことです。
使用例
ls | clipboard
これにより、現在のフォルダの内容がクリップボードにコピーされます。
注: パイプとしてのみ機能します。引数をコピーする必要がある場合は、bash実行可能ファイル 直接 を使用してください。
以前の投稿に基づいて、私は.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
Edgeの場合をカバーするためだけに:)そして質問の題名は(少なくとも今は)コマンドの出力をクリップボードに直接コピーする方法を尋ねるからです。
多くの場合、コマンドの実行後にそのコマンドの出力をコピーしたほうが便利であり、そのコマンドを再度実行したくない、または実行できないことがあります。
このシナリオでは、gdmまたは同様のマウスユーティリティを使用して、マウスを使用して選択することができます。コピーして端末に貼り付けるには、apt-get install gdm
、次に右クリックまたはCntrl + Shift + cとCntrl + Shift + vの組み合わせ
または、これは私にとっては好ましい方法です(複数のペインを並べて表示しているときにマウスが1つのペイン内で正しく選択できず、複数行を選択する必要がある場合)、tmuxを使用し[、スペース、移動して選択、入力、またはコードブロックを選択できます。また、これはあなたがtmuxのようなcliマルチプレクサのレーンの1つの内側にいて、あなたがテキストの束を選択する必要があるが行番号ではない場合に特に有用です(私のvim設定は行番号をレンダリングします)
その後、以下のコマンドを使うことができます。
tmux save-buffer - | xclip -i
もちろん、あなたが好きなものにエイリアスすることも、tmux設定ファイルで直接バインドすることもできます。
これは、コマンドを再度実行できない場合に、このEdgeのケースをカバーするための概念的な回答を提供するためのものです。より具体的なコード例が必要な場合は、お知らせください
乾杯