web-dev-qa-db-ja.com

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

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

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

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

echo "hello" | xclip

次に Ctrl+Shift+V、「hello」ではなく、元のクリップボードエントリを取得します。ただし、xclipからコンテンツを取得しようとすると、正常に機能します。

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

助けていただければ幸いです!

ありがとう

7

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

お試しください

echo "hello" | xclip -selection clipboard

また、参照してください

man xclip

xclipの詳細については

15
Sergey

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

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

出力FREDを取得します。 (これは、最終的なwxpasteなしで同じものを取得するため、不自然な例ですが、達成できることのフレーバーを与えると思います。)

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

Wxcopy/wxpasteを私の好みに合わせてもう少し快適にするために、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をググリングすることでそれらを見つけることができます(まだ有効です)

2
LukeJKendall

自分で簡単にするために、xclipおよびmacosxのpbcopyの機能を模倣するために、pbpasteのエイリアスを作成しました。

Sudo apt-get install xclip -y

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

nano ~/.bashrc

これらの行を追加します

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

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

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

1
Gary Woodfine