Làm thế nào tôi có thể sao chép đầu ra của một lệnh trực tiếp vào clipboard của mình?


529

Làm cách nào tôi có thể chuyển đầu ra của lệnh vào bảng tạm và dán lại khi sử dụng thiết bị đầu cuối? Ví dụ:

cat file | clipboard


bản sao có thể có của superuser.com/questions/104981/ từ
Champ

Tôi vừa hỏi một câu hỏi liên quan vì tôi không thể làm xclip hoạt động khi đăng nhập vào Ubuntu từ Git Bash trên Windows: stackoverflow.com/q/60117294/470749
Ryan

1
Lưu nội dung tập tin vào bảng clip. apt install xclipcat file | xclip -sel clip
EsmaeelE

Câu trả lời:


598

Tôi luôn muốn làm điều này và tìm thấy một cách tốt đẹp và dễ dàng để làm điều đó. Tôi đã viết ra thủ tục đầy đủ chỉ trong trường hợp bất cứ ai khác cần nó.

Đầu tiên cài đặt chương trình 16 kB có tên xclip:

sudo apt-get install xclip

Sau đó, bạn có thể dẫn đầu ra vào xclipđể được sao chép vào bảng tạm:

cat file | xclip

Để dán văn bản bạn vừa sao chép, bạn sẽ sử dụng:

xclip -o

Để đơn giản hóa cuộc sống, bạn có thể thiết lập bí danh trong tệp .bashrc của mình như tôi đã làm:

alias "c=xclip"
alias "v=xclip -o"

Để xem điều này hữu ích như thế nào, hãy tưởng tượng tôi muốn mở đường dẫn hiện tại của mình trong cửa sổ terminal mới (có thể có những cách khác để thực hiện như Ctrl+ Ttrên một số hệ thống, nhưng đây chỉ là mục đích minh họa):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Chú ý ` ` xung quanh v. Điều này thực thi vnhư một lệnh đầu tiên và sau đó thay thế nó tại chỗ cdđể sử dụng.

Chỉ sao chép nội dung vào Xclipboard

cat file | xclip

Nếu bạn muốn dán vào một nơi khác ngoài Xứng dụng, hãy thử ứng dụng này:

cat file | xclip -selection clipboard

145
"tệp mèo | xclip" chỉ sao chép nội dung vào bảng tạm 'X', nếu bạn muốn dán vào một nơi khác ngoài ứng dụng 'X', hãy thử ứng dụng này: "tệp mèo | xclip -selection clipboard"
khotyn

5
Lựa chọn xử lý của bạn là phù hợp!
Matt Joiner

4
Nếu bạn muốn xóa ký tự dòng mới để bạn có thể trực tiếp dán và chỉnh sửa kết quả của "pwd | c", bạn có thể thực hiện "pwd | tr -d '\ n' | xclip -selection c"
Anake

12
cũng xác định alias "cs=xclip -selection clipboard"alias "vs=xclip -o -selection clipboard"để sao chép / dán từ bảng tạm hệ thống dễ dàng hơn
Yibo Yang

1
Thế còn một giải pháp mà tôi không có quyền truy cập sudo và xclip chưa được cài đặt thì sao ??
DanGordon

179

Trên OS X, sử dụng pbcopy; pbpasteđi theo hướng ngược lại.

pbcopy < .ssh/id_rsa.pub

14
Yup! Giống như thế này cho ví dụ:pbcopy < .ssh/id_rsa.pub
doublejosh

không hoạt động cho đầu ra lệnh tho - vdpbcopy < git merge-base master some-branch
Ben

nếu bạn đang sử dụng tmux, nó sẽ không hoạt động trừ khi bạn gắn lại phiên của bạn: superuser.com/a/413233/146254
Atav32

1
bạn cũng có thể sử dụng cat, nếu bạn đã làm việc với nó: cat file.txt | pbcopy
rtrigoso

3
Tôi biết nhận xét này đã 5 tuổi, nhưng trong trường hợp ai đó tình cờ gặp vấn đề này trong tương lai, để sử dụng với đầu ra lệnh, hãy làmgit merge-base master some-branch | pbcopy
Sam

62

Tôi đã tạo một công cụ cho Linux / OSX / Cygwin tương tự như một số công cụ khác nhưng hơi độc đáo. Tôi gọi nó cbnó có thể được tìm thấy trong ý chính github này .

Trong ý chính đó, tôi trình bày cách sao chép và dán thông qua dòng lệnh bằng Linux, macOS và Cygwin.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

hệ điều hành Mac

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Lưu ý: Ban đầu tôi chỉ có ý định đề cập đến điều này trong bình luận của mình cho câu trả lời của Bob Enohp . Nhưng sau đó tôi nhận ra rằng tôi nên thêm một README vào ý chính của mình. Vì trình soạn thảo ý chính không cung cấp bản xem trước Markdown, tôi đã sử dụng hộp câu trả lời ở đây và sau khi sao chép / dán nó vào ý chính của mình, "Tôi cũng có thể gửi câu trả lời."

cb

Một tee chống rò rỉ vào clipboard

Kịch bản này được mô hình hóa sau tee(xem man tee).

Nó giống như các lệnh sao chép và dán bình thường của bạn, nhưng thống nhất và có thể cảm nhận khi bạn muốn nó có thể kết nối được

Ví dụ

Sao chép

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Dán

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

Xâu chuỗi

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

Sao chép qua chuyển hướng tập tin

(về mặt thời gian, nó có ý nghĩa để giới thiệu điều này ở cuối)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

Điều này làm việc hoàn hảo đối với tôi để sao chép một đầu ra lệnh vào bảng tạm trong thiết bị đầu cuối trên macOS, cảm ơn!
Joshua Dyck

46

Tôi đã viết kịch bản nhỏ này để đưa công việc đoán ra khỏi các lệnh sao chép / dán.

Phiên bản Linux của tập lệnh dựa trên xclip đã được cài đặt trong hệ thống của bạn. Kịch bản được gọi là clipboard.

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

Phiên bản OS X của tập lệnh dựa trên pbcopy và pbpaste được cài đặt sẵn trên tất cả các máy Mac.

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

Sử dụng tập lệnh rất đơn giản vì bạn chỉ cần đưa vào hoặc ra clipboardnhư thể hiện trong hai ví dụ này.

$ cat file | clipboard

$ clipboard | less

3
Tôi sử dụng tên pbcopypbpastetrên Linux để nó hoạt động cho cả Linux và OS X.
StackedCrooking

Để làm cho tập lệnh hoạt động trên toàn cầu trong Ubuntu: * Lưu nó tại ~/.scripts/clipboard * Làm cho nó có thể thực thi được chmod +x ~/.scripts/clipboard cho bash: * thêm export PATH=$PATH:~/.scriptsvào phần cuối của ~/.bashrc cá: * thêm set PATH ~/.scripts $PATHvào ~/.config/fish/fish.config Nếu bất kỳ tệp hoặc thư mục nào không tồn tại chỉ cần tạo chúng.
Khúc côn cầu

2
Bạn cũng có thể gói tập lệnh này dưới dạng hàm clipboard(){ ... }và dán nó vào .bashrc
Sebastian Nowak

Điều này rất giống với cái tôi đã làm, nhưng tôi cho phép xích như thế nào date | cb | tee -a updates.log. Điều đó sẽ gửi dateđầu ra lệnh vào bảng tạm và chuyển nó tới tee -alệnh nối nó vào một tệp và chuyển nó tới stdout. Nhưng nó giống như một " tee chống rò rỉ vào clipboard" bởi vì nếu bạn không date | cbnhận được kết quả đầu ra. Và cuối cùng, nó cũng có cb > file.txt gist.github.com/RichardBronosky/ Kẻ
Bruno Bronosky

Một đề xuất - loại bỏ ký tự dòng mới để tránh thực hiện lệnh khi dán (ví dụ: nếu sao chép dán một đường dẫn). Tôi làm điều đó bằng cách sửa đổi lệnh xclip -i -selection clipboardthànhxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

Thêm phần này vào ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Bây giờ clip p dán và c bản sao clip - nhưng bạn cũng có thể làm công cụ fancier:

clipp | sed 's/^/    /' | cclip

Thụt vào clipboard của bạn; tốt cho các trang web không có { }nút stack stack

Bạn có thể thêm nó bằng cách chạy này:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc

Vui lòng cho một ví dụ sử dụng
Ulf Aslak

7

Tôi đang sử dụng Parcellite và xselđể sao chép tin nhắn cam kết cuối cùng từ gittrình quản lý clipboard của mình (vì một số lý do xclipkhông hoạt động):

$ git log -1 --pretty=%B | xsel -i -b

7

Không sử dụng các công cụ bên ngoài, nếu bạn đang kết nối với máy chủ xem SSH, đây là một lệnh tương đối dễ dàng:

Từ dấu nhắc lệnh của Windows 7+:

ssh user@server cat /etc/passwd | clip

Điều này sẽ đưa nội dung của tập tin từ xa vào clipboard tạm thời của bạn.

(Lệnh yêu cầu chạy Pagete cho khóa hoặc nó sẽ yêu cầu bạn nhập mật khẩu.)


1
@AfshinMoazami, tiêu đề và bản thân câu hỏi là chung chung, Chỉ gợi ý các thẻ cho hệ thống unix và câu trả lời của tôi bao gồm trường hợp khi bạn cố gắng lấy ngày TỪ máy chủ unix cho máy Windows, có thể là những trình đọc tương lai hữu ích.
d.raev

1
Được nâng cấp bởi vì có, hữu ích cho các quản trị viên Windows, những người chỉ có Powershell để chơi với cục bộ (mặc dù bây giờ với LSW thực sự hoạt động, tôi có thể rơi vào bash trực tiếp từ Powershell và làm những việc * nixy của tôi từ đó).
với

Nó hoạt động trên dấu nhắc DOS cũng như git bash trên windows 10 tức làecho Hello World | clip

5

Đối với mac, đây là một cách ví dụ để sao chép (vào clipboard) dán (từ clipboard) bằng dòng lệnh

Sao chép kết quả của pwdlệnh vào clipboard như

$ pwd | pbcopy

Sử dụng nội dung trong bảng tạm như

$ cd $(pbpaste)

3

Tôi đã tạo một công cụ nhỏ cung cấp chức năng tương tự, mà không cần sử dụng xclip hoặc xsel. stdoutđược sao chép vào một bảng tạm và có thể được dán lại trong thiết bị đầu cuối. Xem:

https://sourceforge.net/projects/commandlinecopypaste/

Lưu ý rằng công cụ này không cần phiên X. Bảng tạm chỉ có thể được sử dụng trong thiết bị đầu cuối và không được dán bằng Ctrl+Vhoặc nhấp chuột giữa vào các cửa sổ X khác.


3

Trong Linux với xclip được cài đặt:

xclip -selection clipboard <file


2

Dựa trên các bài viết trước, tôi đã kết thúc với giải pháp bí danh nhẹ cân sau đây có thể được thêm vào .bashrc:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

Ví dụ:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29

1

Tôi đến từ một tước xuống KDE nền và không có quyền truy cập vào xclip, xselhoặc những thứ ưa thích khác. Tôi có một TCSH Konsole để làm cho vấn đề tồi tệ hơn.

Yêu cầu: qdbus klipper xargs bash

Tạo một bash thực thi foo.sh.

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

Lưu ý: Điều này cần phải được bash vì TCSH không hỗ trợ các đối số nhiều dòng.

Tiếp theo là một bí danh TCSH trong .cshrc.

alias clipboard xargs -0 /path/to/foo

Giải trình:

xargs -0ống stdin thành một đối số duy nhất. Đối số này được truyền cho bash thực thi để gửi yêu cầu "sao chép vào bảng tạm" để klippersử dụng qdbus. Đường ống đến /dev/nulllà không in ký tự dòng mới được trả về qdbuscho bàn điều khiển.

Cách sử dụng ví dụ:

ls | clipboard

Điều này sao chép nội dung của thư mục hiện tại vào clipboard.

Lưu ý: Chỉ hoạt động như một đường ống. Sử dụng bash thực thi trực tiếp nếu bạn cần sao chép một đối số.


1

Tôi thường chạy lệnh này khi tôi phải sao chép ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v bất cứ nơi nào khác.


1

trên Wayland xcopy dường như không hoạt động, thay vào đó hãy sử dụng wl-clipboard . ví dụ như trên fedora

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

0

Đối với những người sử dụng bash được cài đặt trên hệ thống windows của họ (được gọi là Hệ thống con Windows cho Linux (WSL)), việc thử xclip sẽ gây ra lỗi:

Error: Can't open display: (null)

Thay vào đó, hãy nhớ lại rằng hệ thống con linux có quyền truy cập vào các tệp thực thi của Windows. Có thể sử dụng clip.exe như

echo hello | clip.exe

cho phép bạn sử dụng lệnh dán (ctrl-v).


1
Xin lưu ý rằng nếu một xserver (chẳng hạn như vcxauss hoặc xming) được cài đặt trên windows, màn hình hiển thị và xclipboard đang chạy, bạn thực sự có thể sử dụng xclip một cách dễ dàng.
bitbyte

0

Chỉ để bao gồm một trường hợp cạnh :) và bởi vì tiêu đề câu hỏi hỏi (ít nhất là bây giờ) làm thế nào để sao chép đầu ra của một lệnh trực tiếp vào clipboard.

Thường thì tôi thấy hữu ích khi sao chép đầu ra của lệnh sau khi nó đã được thực thi và tôi không muốn hoặc không thể thực hiện lại lệnh.

Đối với kịch bản này, chúng ta có thể sử dụng gdm hoặc một tiện ích chuột tương tự và chọn sử dụng chuột. apt-get install gdmvà sau đó nhấp chuột phải hoặc kết hợp Cntrl + Shift + c và Cntrl + Shift + v để sao chép và dán vào thiết bị đầu cuối

Hoặc, đó là phương pháp ưa thích đối với tôi (vì chuột không thể chọn đúng bên trong một khung khi bạn có nhiều khung cạnh nhau và bạn cần chọn nhiều hơn một dòng), bằng cách sử dụng tmux, chúng ta có thể sao chép vào bộ đệm tmux bằng tiêu chuẩn [, dấu cách, di chuyển để chọn, nhập hoặc bạn có thể chọn một khối mã. Ngoài ra, điều này đặc biệt hữu ích khi bạn ở trong một trong các làn của bộ ghép kênh cli như tmux VÀ bạn cần chọn một loạt văn bản, nhưng không phải là số dòng (thiết lập vim của tôi hiển thị số dòng)

Sau này, bạn có thể sử dụng lệnh:

bộ đệm tiết kiệm tmux - | xclip -i

Tất nhiên bạn có thể đặt bí danh cho thứ gì đó bạn thích hoặc liên kết trực tiếp trong tệp cấu hình tmux

Đây chỉ là để cung cấp cho bạn một câu trả lời về khái niệm để bao quát trường hợp cạnh này khi không thể thực hiện lại lệnh. Nếu bạn cần ví dụ mã cụ thể hơn, hãy cho tôi biết

Chúc mừng

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.