명령 줄 클립 보드 액세스


10

내 작업 중 일부를보다 효율적으로 만들기 위해 명령 줄 도구를 만들고 있습니다. 콘텐츠를 클립 보드에 쓸 수 있어야하지만 어떤 이유로 든 작동하지 않습니다.

나는 모두를 설치 해봤 xclip하고 xsel있지만, 모두 같은 동작을 : 그들은 클립 보드의 벌금 읽기 / 쓰기 수 있지만 메인 우분투 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. 나는 개인적으로 항상 그것을 사용합니다
Sergiy Kolodyazhnyy

신이 왜 그렇게 혼란스럽고, 왜 클립 보드 하나가 충분하지 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
않은가?

빈번한 동작은 "마우스로 일부 텍스트를 선택"하는 것 같습니다. 키보드로 동일한 작업을 수행 할 수 있습니까?
nilon

3

그것은 자신을 위해 쉽게 내가 별칭을 생성 만들려면 xclip의 모방 기능에 순서 pbcopy와와 pbpaste맥 OS X에서

sudo apt-get install xclip -y

그런 다음 ~/.bashrc별칭을 추가하도록 편집하십시오 .

nano ~/.bashrc

다음 줄을 추가하십시오 (파일 끝에 넣을 수 있음).

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

저장하고 종료 한 다음 새 쉘을 열거 나 source ~/.bashrc별명을 사용하여 실행 하십시오.

내 블로그 게시물 에 자세한 내용이 포함되어 있습니다.


2

창 제작자의 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를 검색하여 스크립트를 찾을 수 있습니다 (아직 유효합니다).


답변을 편집하여 맨 페이지에 하이퍼 링크를 추가 할 수 있습니다. (새로운 AU 사용자라도 링크를 2 개까지 추가 할 수 있어야합니다.)
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.