コマンドラインクリップボードアクセス


10

タスクの一部をより効率的にするために、コマンドラインツールを作成しています。コンテンツをクリップボードに書き込めるようにする必要がありますが、なんらかの理由で機能しません。

との両方xclipをインストールしようとしましたxselが、どちらも同じ動作をします。クリップボードへの読み取り/書き込みはできますが、メインのUbuntu GUIからはアクセスできません。

ターミナルでも試してみました...

echo "hello" | xclip

次にCtrl+ Shift+の場合V、「hello」ではなく、元のクリップボードエントリを取得します。しかし、からコンテンツを取得しようとするとxclip、問題なく動作します。

主な目標は、コンテンツをFirefoxまたは私が使用している他のGUIベースのプログラムに貼り付けることです。

回答:


16

Xにはいくつかの異なるクリップボードがあります:) xclipデフォルトでテキストをコピーするものは「選択バッファ」です。通常、マウスでテキストを選択して、マウスの中央ボタンで貼り付けることができます。このバッファーは、Ctrl-Shift-Vで貼り付けることができるバッファーとは別のものです。

やってみる

echo "hello" | xclip -selection clipboard

また、参照してください

man xclip

xclipの詳細については


2
参考までに、に短縮することもできますxclip -sel clip。私はいつもそれをずっと使っています
セルギー・コロディアズニー

なぜ神はこれがそんなに混乱するのか、なぜ1つのクリップボードでは十分ではなかったのか、man xclip -selection specify which X selection to use, options are "primary" to use XA_PRIMARY (default), "secondary" for XA_SECONDARY or "clipboard" for XA_CLIPBOARD
mxmlnknを

よくあるのは「マウスでテキストを選択する」ことです。キーボードでも同じことができますか?
nilon

3

Mac OS X とxclipの機能を模倣するために、自分にとって簡単にするためにのエイリアスを作成しました。pbcopypbpaste

sudo apt-get install xclip -y

次にを編集して~/.bashrcエイリアスを追加します。

nano ~/.bashrc

次の新しい行を追加します(ファイルの最後に追加できます)。

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

保存して終了し、新しいシェルを開くかsource ~/.bashrc、エイリアスを使用するために実行します。

私のブログ投稿に詳細が含まれています。


2

私はかつてwindowmakerのユーティリティwxcopyとwxpasteを使用していましたが、最近のLinuxバージョン(またはXバージョン)はそれらを壊しているようです-セキュリティが強化され、それらが一致するように更新されていないようです。たとえば、次のようなことができます。

echo fred | wxcopy | tr "a-z" "A-Z" | wxpaste

出力FREDを取得します。(最終的なwxpasteがなくても同じことができるので、これは不自然な例ですが、達成できることの味が得られると思います。)

ただし、「xcb」パッケージを使用して同じ効果を実現できます。これは信じられないほど軽量で、8つのクリップボードの小さな(要約された)視覚的表示も提供します。

私は、wcopy / wxpasteを少し快適にするために、2年前にwcopy / wpasteのシェルスクリプトを作成しました。今夜、wxcopy / wxpasteまたはxcbのいずれかで動作するように更新しました。これにより、必要以上に複雑になりますが、ここに貼り付けます。このフォーラムには長すぎないことを願っています。

これがwcopyです。

#!/bin/sh
#
# Provide some enhancements to the wxcopy command, which copies standard input
# to an X11 clipboard text buffer.
#
# Allow copying from stdin to any of the cutbuffers.  Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#

if [ `uname -s` = "Darwin" ]
then
    WXCOPY=pbcopy
    WXPASTE=pbpaste
else
    WXCOPY=wxcopy
    WXPASTE=wxpaste
    BUFSPEC="-cutbuffer"
    xcb -p 0 > /tmp/wc$$
    if echo "fred$$" | wxcopy -cutbuffer 0 && [ `wxpaste` = "fred$$" ]
    then
        : # Great, they're actually working.  Not common on modern Linuxes.
        echo "working" > $HOME/.wcopyok
    else
        rm -f $HOME/.wcopyok
        WXCOPY="xcb -s"
        WXPASTE="xcb -p"
        BUFSPEC=
    fi
    xcb -s 0 < /tmp/wc$$
fi

unset WXARGS
if [ $# = 0 ]
then
    $WXCOPY ${WXCOPY_DEFS:-0}
else
    MYNAME=`basename $0`
    USAGE="usage: $MYNAME [ [0-9]... ] [$WXCOPY's args]"
    numlist=true
    for n
    do
        if $numlist && expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
        then
            NUMARGS="$NUMARGS $n"
        else
            numlist=false
            if [ "x$n" = "x-h" ]
            then
                echo "$USAGE" >&2
                exit 0
            else
                WXARGS="$WXARGS $n"
            fi
        fi
    done
    set - $NUMARGS
    $WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $1
    ORIG="$1"
    shift
    for n
    do
        $WXPASTE $BUFSPEC $ORIG | $WXCOPY $WXCOPY_DEFS $WXARGS $BUFSPEC $n
    done
fi

そしてここにwpasteがあります:

#!/bin/sh
#
# Provide some enhancements to the wxpaste command, which pastes from X11
# clipboard text buffers to standard output.
#
# Allow pasting to stdout from any of the cutbuffers.  Note that they are
# indexed counting from 0.
#
# Author: Luke Kendall
#

if [ `uname -s` = "Darwin" ]
then
    WXCOPY=pbcopy
    WXPASTE=pbpaste
else
    WXCOPY=wxcopy
    WXPASTE=wxpaste
    BUFSPEC="-cutbuffer"
    if [ -s $HOME/.wcopyok ]
    then
        : # Great, they're actually working.  Not common on modern Linuxes.
    else
        WXCOPY="xcb -s"
        WXPASTE="xcb -p"
        BUFSPEC=
    fi
fi

if [ $# = 0 ]
then
    $WXPASTE ${WXPASTE_DEFS:-0}
else
    MYNAME=`basename $0`
    USAGE="usage: $MYNAME [ [0-9]... ] [$WXPASTE's args]"
    for n
    do
        if expr "x$n" : 'x[0-9][0-9]*$' > /dev/null
        then
            NUMARGS="$NUMARGS $n"
        elif [ "x$n" = "x-h" ]
        then
            echo "$USAGE" >&2
            exit 0
        else
            WXARGS="$WXARGS $n"
        fi
    done
    set - $NUMARGS
    : echo "Num args: $#"
    for n
    do
        : echo "Doing: $WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n"
        $WXPASTE $WXPASTE_DEFS $WXARGS $BUFSPEC $n
    done
fi

誰かが興味を持っている場合は、スクリプトのマニュアルページも作成しましたが、wcopy.1xとwpaste.1xをグーグル検索すると、それらを見つけることができます(まだ有効です)。


回答を編集して、マンページにハイパーリンクを追加できます。(新しいAUユーザーであっても、最大2つのリンクを追加できるはずです。)
Eliah Kagan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.