Bashでクリップボードとの間でパイプをやり取りできますか?
それがデバイスハンドルに/からハンドルしているか、補助アプリケーションを使用しているかどうか、私は何も見つけることができません。
たとえば、/dev/clip
がクリップボードにリンクしているデバイスであれば、次のようにします。
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
あなたが扱うことができるかもしれないたくさんのクリップボードがあります。私はあなたがおそらくX Windowsのプライマリクリップボードにものを入れたいと思うLinuxユーザーであると思います。通常、会話したいクリップボードには、会話できるユーティリティがあります。
Xの場合、xclip
(など)があります。 xclip -selection c
は、ほとんどのアプリケーションでCtrl-C、Ctrl-Vで動作するデータをクリップボードに送ります。
Mac OS Xを使っているなら、pbcopy
があります。
Linux端末モード(Xなし)の場合は、クリップボードのあるgpm
または screen を調べます。 screen
コマンドreadreg
を試してください。
Windows 10以降またはcygwinでは、/dev/clipboard
またはclip
を使用してください。
別名xclip="xclip -selection c"
を使用していることを確認してください。 Ctrl+v 別の場所に貼り付けます。
echo test | xclip
Ctrl+v === test
# You can install xclip using `apt-get`
apt-get install xclip
# or `pacman`
pacman -S xclip
# or `dnf`
dnf install xclip
apt-get
、pacman
、dnf
のいずれにもアクセスできない場合は、 sourceforge にソースがあります。
~/.bash_aliases
に以下を追加します。
alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"
. ~/.bash_aliases
を使用するか、プロファイルを再起動して新しい設定を読み込むことを忘れないでください。
~/.config/fish/config.fish
に以下を追加します。
abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"
変更を適用するために端末を再起動して、魚のインスタンスを再起動することを忘れないでください。
setclip
とgetclip
を使うことができます。例えば:
$ echo foo | setclip
$ getclip
foo
xsel Debian/Ubuntu/Mintについて
# append to clipboard:
cat 'the file with content' | xsel -ib
# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib
# show clipboard
xsel -b
# Get more info:
man xsel
インストール
Sudo apt-get install xsel
うわー、私はこの質問に対していくつの答えがあるのか信じられません。全部試したわけではありませんが、トップ3または4を試したところ、どれもうまくいきません。私にとってうまくいったのは、dougというユーザーによって書かれたコメントの1つにある答えでした。私はそれがとても有用であると思ったので、私は答えで言い直すことにしました。
Xcopyユーティリティをインストールし、ターミナルに入ったら、次のように入力します。
コピー
Thing_you_want_to_copy|xclip -selection c
貼り付け
myvariable=$(xclip -selection clipboard -o)
私はたくさんの答えがpbpasteとpbcopyを推薦しているのに気づきました。これらのユーティリティを使用していても、何らかの理由でレポジトリで使用できない場合は、xcopyコマンドのエイリアスを作成してpbpasteおよびpbcopyと呼びます。
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
それで、それはこのようになります:
Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
これは、複数のプラットフォームで動作するクリップボードを読むためのbashスクリプトを使用する準備ができていることです。機能を追加する場合は、ここでスクリプトを編集してください(例:より多くのプラットフォーム)。
#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
# Mac OS X
# git Shell / Cygwin (Windows)
# Linux (e.g. Ubuntu)
#
# display an error
#
error() {
echo "error: $1" 1>&2
exit 1
}
#
# getClipboard
#
function getClipboard() {
os=`uname`
case $os in
# git bash (Windows)
MINGW32_NT-6.1)
cat /dev/clipboard;;
# Mac OS X
Darwin*)
pbpaste;;
# Linux
Linux*)
# works only for X clipboard - a check that X is running might be due
xclip -o;;
*)
error "unsupported os $os";;
esac
}
tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp
Linux用のWindowsサブシステムでは、clip.exeを使用してクリップボードにコピーできます。
cat file | clip.exe
|
パイプコマンドを使用することを忘れないでください。 >
コマンドではありません、それはうまくいきませんので。
Windows(Cygwin搭載)では、 this の記事に記載されているcat /dev/clipboard
またはecho "foo" > /dev/clipboard
を試してください。
Linuxにはさまざまなクリップボードがあります。 Xサーバには1つ、ウィンドウマネージャにはもう1つなどがあります。標準的なデバイスはありません。
そうです、CLIでは、 Emacs や vi などの他のアプリケーションと同様に、screenプログラムにも独自のクリップボードがあります。
Xでは、 xclip を使用できます。
あなたは他の可能な答えのためにこのスレッドをチェックすることができます: http://unix.derkeiler.com/Newsgroups/comp.unix.Shell/2004-07/0919.html
Macのみ
echo "Hello World" | pbcopy
pbpaste
これらは/usr/bin/pbcopy
と/usr/bin/pbpaste
にあります。
clipboard-cli を使用してください。 macOS、Windows、Linux、OpenBSD、FreeBSD、Androidで問題なく動作します。
以下でインストールしてください。
npm install -g clipboard-cli
それからあなたはできる
echo foo | clipboard
必要に応じて、次のコードを.bashrc
、.bash_profile
、または.zshrc
に入れることで、cb
にエイリアスできます。
alias cb=clipboard
Windows(Cygwin)でクリップボードにコピーして貼り付けます。
見る:
$ clip.exe - ?
CLIP説明:コマンドラインツールの出力をWindowsのクリップボードにリダイレクトします。このテキスト出力は他のプログラムに貼り付けることができます。パラメータリスト:/?このヘルプメッセージを表示します。例:DIR | CLIP現在のディレクトリリストのコピーをWindowsのクリップボードに置きます。 CLIP <README.TXT readme.txtのテキストのコピーをWindowsのクリップボードに置きます。
Getclip(shift + insの代わりに使うことができます!)、putclip(echo oaeuoa | putclip.exeをクリップに入れる)もあります。
xsel -b
X11の仕事をします、それはほとんどすでにインストールされています。 xselのmanページを見れば、努力する価値があります。
これは単純なPythonスクリプトで、必要なものだけを実行します。
#!/usr/bin/python
import sys
# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'
if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
with open(clipboard_file, 'r') as c:
sys.stdout.write(c.read())
Elif(sys.stdout.isatty()): # Should save stdin to clipboard
with open(clipboard_file, 'w') as c:
c.write(sys.stdin.read())
これを実行ファイルとしてあなたのパスのどこかに保存してください(私はそれを/usr/local/bin/clip
に保存しました。あなたのクリップボードに保存されるものをパイプで送ることができます...
echo "Hello World" | clip
そして、クリップボードの内容を他のプログラムに渡すことができます。
clip | cowsay
_____________
< Hello World >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
単独で実行すると、クリップボードの内容が出力されるだけです。
このスレッドから、gclip
/xclip
/xsel
というサードパーティソフトウェアをインストールする必要がないオプションがあります。
Perlスクリプト(Perlは通常いつもインストールされているので)
use Win32::Clipboard;
print Win32::Clipboard::GetText();
私が何年も前に書いたいくつかのWindowsプログラム。クリップボードのダンプ、プッシュ、追加、印刷ができます。それはこのように動作します:
dumpclip | Perl -pe "s/monkey/chimp/g;" | pushclip
それはソースコードを含みます: cmd_clip.Zip
いくつかの方法があります。言及されている方法のいくつかは(私が思う)tmux、screen、vim、emacs、そしてShellを含みます。私はemacsもスクリーンも知らないので、他の3つを見ていきます。
Xの選択ではありませんが、tmuxにはprefix-[
からアクセスできるコピーモードがあります(prefix
は Ctrl+B デフォルトで)。このモードに使用されるバッファはtmux専用のもので、tmux専用です。これはかなりの可能性を広げ、正しい状況でのXの選択よりも用途が広くなります。
このモードを終了するには、 q;移動するには、vim
またはemacs
バインディング(default = vim)を使用します。移動にはhjkl
、文字/行/ブロック選択にはv/V/C-v
などを選択します。 Enter コピーしてモードを終了します。
このバッファから貼り付けるには、prefix-]
を使用します。
X11
のインストールには、デフォルトでxclip
とxsel
の2つのプログラムが付属しているようです(startx
とxinit
の両方に付属しているのと同じようなものです)。他の答えのほとんどはxclip
に言及しています、そして私はその簡潔さのためにxsel
がとても好きです、それで私はxsel
をカバーするつもりです。
xsel(1x) から
入力オプション
-a、 - append
選択に標準入力を追加します。含意 - i。
-f、 - follow
標準入力が増えるにつれて選択に追加します。含意 - i。
-i、 - input
標準入力を選択範囲に読み込みます。
出力オプション
-o、 - output
選択範囲を標準出力に書き出します。
アクションオプション
-c、 - clear
選択を解除します。すべての入力オプションをオーバーライドします。
-d、 - delete
現在の選択を削除するように要求します。これは選択をクリアするだけでなく、選択が存在するプログラムに選択されたコンテンツを削除するように要求します。すべての入力オプションをオーバーライドします。
選択オプション
-p、 - primary
pRIMARY選択を操作します(デフォルト)。
-s、 - 2次
2番目の選択を操作します。
-b、 - クリップボード
cLIPBOARD選択で動作します。
そしてそれはあなたが知る必要があるすべてについてです。 p
の場合はPRIMARY
(またはなし)、s
の場合はSECONDARY
、b
の場合はCLIPBOARD
、出力の場合はo
。
例:TTYからfoo
の出力をコピーし、それをバグレポート用のWebページに貼り付けたいとします。これを行うには、TTY/Xセッションへ/からコピーすることが理想的です。それでは、質問はTTYからクリップボードにアクセスするにはどうすればよいですか?
この例では、Xセッションがディスプレイ:1
にあるとします。
$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
それから私はいつものようにそれをフォームにCtrl-V
できます。
今サポートサイトの誰かが私に問題を解決するために実行するように命じるコマンドを与えると言う。それは複雑で長いです。
$ DISPLAY=:1 xsel -bo
Sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
ピザの並び順は、コマンドラインの生産的な使い方のようです。
...移動します。
+clipboard
でコンパイルされているなら(これは重要です!あなたのvim --version
をチェックしてください)、VimはXのPRIMARY
とCLIPBOARD
の選択にアクセスできるはずです。 2つの選択はそれぞれ*
と+
レジスタからアクセス可能で、他のレジスタと同じようにあなたの都合で読み書きすることができます。例えば:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example
あなたのvimのコピーがXの選択へのアクセスを直接サポートしていないのであれば、それは世界の終わりではありません。最後のセクションで説明したように、xsel
の手法を使用することができます。
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
いくつかのキーコンボをバインドするとあなたは良いはずです。
macOSではpbpaste
を使います
例えば:
クリップボードを更新する
pbpaste | Ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy
楽しい。
あなたが私のようで、root権限なしでLinuxサーバを走らせていて、xclipやgpmがないなら、一時ファイルを使うことでこの問題を回避することができます。例えば:
$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world
良いリファレンスが見つかりました: https://unix.stackexchange.com/questions/69111/
私の場合、クリップボードにコンテンツを貼り付け、そこに貼り付けられているものを確認したいので、ファイル記述子とともにtee
コマンドも使用しました。
echo "just a test" | tee >(xclip -i -selection clipboard)
>()
はプロセス置換の形式です。 bashはそれぞれを、括弧内のプログラムの標準入力に接続されているファイル記述子へのパスに置き換えます。
tee
commandは、コマンドをフォークして「コンテンツをパイプ」し、標準出力「stdout」で結果を確認できるようにします
また、エイリアスを作成してクリップボードに書き込み、クリップボードに書き込み、MACのどこにいるかのように「pbcopy」と「pbpaste」を使用できます。私の場合、zshを使用するときに、エイリアスファイルに次のように記述します。
(( $+commands[xclip] )) && {
alias pbpaste='xclip -i -selection clipboard -o'
alias pbcopy='xclip -selection clipboard'
}
zshの(( $+command[name] ))
は、コマンド "name"がシステムにインストールされているかどうかをテストし、両方のエイリアスが{}
でグループ化されます。 &&
はバイナリANDで、aがbの場合、したがってxclipがある場合はエイリアスが設定されます。
echo "another test" | tee >(pbcopy)
クリップボードのコンテンツを取得するには、次のように入力します。
pbpaste | "any-command-you-need-here"
1年以上経っても、私は少し異なる解決法を共有しています。これが誰かに役立つことを願っています。
昨日私は質問に気づいた:「異なるユーザーセッション間でクリップボードを共有する方法は?」でセッションを切り替えるとき ctrlaltF7 - ctrlaltF8実際、コピーしたものを貼り付けることはできません。
名前付きパイプを基にして、次のようなquick&dirty解決策を思いつきました。それは確かにかなり裸で生です、しかし私はそれが機能的であるとわかりました:
user1@Host:~$ mkfifo /tmp/sharedClip
その後、送信端末で
user1@Host:~$ cat > /tmp/sharedClip
最後に、受信端末で:
user2@Host:~$ cat /tmp/sharedClip
さて、あなたは最初の端末に何かをタイプするかペーストして、 return)、受信端末にすぐに表示されます。そこから、好きな場所にコピー/貼り付けできます。
もちろん、これはユーザー2のクリップボードでコンテンツを利用できるようにするためにユーザー1のクリップボードからコンテンツを厳密に取得するだけではなく、追加の[貼り付けとコピー]をクリックする必要があります。
xclip-copyfile もあります。