Truy cập bảng lệnh dòng lệnh


10

Tôi đang xây dựng một công cụ dòng lệnh để làm cho một số nhiệm vụ của tôi hiệu quả hơn. Tôi cần có khả năng viết nội dung vào bảng tạm, nhưng vì một số lý do, nó không hoạt động với tôi.

Tôi đã thử cài đặt cả hai xclipxsel, nhưng cả hai đều có cùng một hành vi: họ có thể đọc / ghi vào bảng tạm, nhưng tôi không thể truy cập nó từ GUI Ubuntu chính.

Tôi cũng đã thử nó trong thiết bị đầu cuối ...

echo "hello" | xclip

Sau đó, nếu Ctrl+ Shift+ V, tôi nhận được mục nhập clipboard ban đầu của mình, không phải "xin chào". Nhưng, nếu tôi cố lấy nội dung từ xclipđó, nó hoạt động tốt.

Mục tiêu chính là đưa nội dung có thể vào được trong Firefox hoặc bất kỳ chương trình dựa trên GUI nào khác mà tôi đang sử dụng.

Câu trả lời:


16

Chà, có một vài clipboards khác nhau trong X :) Theo xclipmặc định, một bản sao văn bản là "bộ đệm lựa chọn" - thông thường bạn chỉ cần chọn một số văn bản bằng chuột và sau đó có thể dán nó bằng nút chuột giữa. Bộ đệm này tách biệt với bộ đệm mà bạn có thể dán bằng Ctrl-Shift-V.

Thử

echo "hello" | xclip -selection clipboard

cũng thấy

man xclip

để biết thêm chi tiết về xclip


2
FYI, cũng có thể được rút ngắn xclip -sel clip. Cá nhân tôi sử dụng nó mọi lúc
Sergiy Kolodyazhnyy

Chúa ơi tại sao điều này lại khó hiểu đến vậy, tại sao không đủ một bảng tạm, xemman 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 28/03/2017

Dường như hành động thường xuyên là "chọn một số văn bản bằng chuột". Có thể cùng một hành động với bàn phím?
nilon

3

Để dễ dàng hơn cho bản thân tôi, tôi đã tạo một bí danh xclipđể bắt chước chức năng của pbcopypbpastetrong Mac OS X.

sudo apt-get install xclip -y

Sau đó chỉnh sửa của bạn ~/.bashrcđể thêm bí danh:

nano ~/.bashrc

Thêm các dòng mới này (bạn có thể đặt chúng ở cuối tệp):

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

Lưu và thoát, sau đó mở một vỏ mới hoặc chạy source ~/.bashrcđể sử dụng các bí danh.

Bài đăng trên blog của tôi có thêm thông tin chi tiết.


2

Tôi đã từng sử dụng các tiện ích wxcopy và wxpaste từ windowmaker, nhưng các phiên bản Linux gần đây (hoặc phiên bản X) dường như đã phá vỡ chúng - Tôi nghi ngờ bảo mật đã được thắt chặt và chúng chưa được cập nhật để phù hợp. Ví dụ: bạn có thể làm những việc như:

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

để có được đầu ra FRED. (Đó là một ví dụ giả định, vì bạn sẽ nhận được điều tương tự mà không có wxpaste cuối cùng, nhưng tôi nghĩ nó mang lại hương vị của những gì bạn có thể đạt được.)

Tuy nhiên, bạn có thể đạt được hiệu ứng tương tự bằng cách sử dụng gói "xcb", rất nhẹ và cũng cung cấp một màn hình hiển thị nhỏ (tóm tắt) gồm 8 bảng ghi.

Tôi đã viết một cặp kịch bản shell wcopy / wpaste năm trước, để làm cho wxcopy / wxpaste dễ chịu hơn một chút theo sở thích của tôi. Tôi đã cập nhật chúng tối nay để làm việc với wxcopy / wxpaste hoặc xcb. Điều đó làm cho chúng phức tạp hơn một chút so với mức cần thiết, nhưng tôi sẽ dán chúng vào đây - hy vọng chúng không quá dài cho diễn đàn này.

Đây là 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

Và đây là 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

Nếu bất cứ ai quan tâm, tôi cũng đã viết các trang dành cho kịch bản - nhưng có lẽ bạn có thể tìm thấy chúng (chúng vẫn còn hiệu lực) bằng cách googling wcopy.1x và wpaste.1x


Bạn có thể chỉnh sửa câu trả lời của mình để thêm siêu liên kết vào các trang. (Bạn sẽ có thể thêm tối đa 2 liên kết, mặc dù bạn là người dùng AU mới.)
Eliah Kagan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.