ฉันจะคัดลอกผลลัพธ์ของคำสั่งลงในคลิปบอร์ดได้อย่างไร


528

ฉันจะไพพ์เอาต์พุตของคำสั่งลงในคลิปบอร์ดของฉันและวางกลับเมื่อใช้เทอร์มินัลได้อย่างไร ตัวอย่างเช่น

cat file | clipboard

เป็นไปได้ที่ซ้ำกันของPipe to / from Clipboard
Ciro Santilli 郝海东冠状病六四事件法轮功

เป็นไปได้ซ้ำซ้อนของsuperuser.com/questions/104981/…
Champ

ฉันเพิ่งถามคำถามที่เกี่ยวข้องเนื่องจากฉันไม่สามารถทำให้ xclip ทำงานเมื่อลงชื่อเข้าใช้ Ubuntu จาก Git Bash บน Windows: stackoverflow.com/q/60117294/470749
Ryan

1
บันทึกเนื้อหาไฟล์ลงในบอร์ดคลิป apt install xclipและcat file | xclip -sel clip
EsmaeelE

คำตอบ:


597

ฉันต้องการทำสิ่งนี้เสมอและพบวิธีที่ดีและง่ายในการทำเช่นนั้น ฉันจดขั้นตอนที่สมบูรณ์ไว้ในกรณีที่คนอื่นต้องการ

ก่อนติดตั้งโปรแกรม 16 kB ที่เรียกว่าxclip:

sudo apt-get install xclip

จากนั้นคุณสามารถไพพ์เอาต์พุตลงในxclipการคัดลอกไปยังคลิปบอร์ด:

cat file | xclip

ในการวางข้อความที่คุณเพิ่งคัดลอกคุณจะต้องใช้:

xclip -o

เพื่อให้ชีวิตง่ายขึ้นคุณสามารถตั้งค่านามแฝงในไฟล์. bashrc ของคุณเช่นเดียวกับที่ฉันทำ:

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

หากต้องการดูว่ามีประโยชน์อย่างไรลองจินตนาการว่าฉันต้องการเปิดพา ธ ปัจจุบันของฉันในหน้าต่างเทอร์มินัลใหม่ (อาจมีวิธีอื่นในการทำเช่นCtrl+ Tในบางระบบ แต่นี่เป็นเพียงภาพประกอบวัตถุประสงค์):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

สังเกตรอบ ๆ` ` vสิ่งนี้เรียกใช้งานvเป็นคำสั่งก่อนจากนั้นจึงแทนที่มันแบบแทนที่cdการใช้

คัดลอกเนื้อหาไปยังXคลิปบอร์ดเท่านั้น

cat file | xclip

หากคุณต้องการวางที่อื่นที่ไม่ใช่Xแอปพลิเคชันให้ลองอันนี้:

cat file | xclip -selection clipboard

144
"cat file | xclip" คัดลอกเนื้อหาไปยังคลิปบอร์ด 'X' เท่านั้นหากคุณต้องการวางที่อื่นที่ไม่ใช่แอปพลิเคชัน 'X' ให้ลองอันนี้: "cat file | xclip
-selection

5
ตัวเลือกการจัดการของคุณเหมาะสมแล้ว!
Matt Joiner

4
หากคุณต้องการลบอักขระบรรทัดใหม่เพื่อให้คุณสามารถวางและแก้ไขผลลัพธ์ของ "pwd | c" ได้โดยตรงคุณสามารถทำได้ "pwd | tr -d '\ n' | xclip -selection c"
Anake

12
ยังกำหนดalias "cs=xclip -selection clipboard"และalias "vs=xclip -o -selection clipboard"เพื่อให้การคัดลอก / วางจากคลิปบอร์ดของระบบง่ายขึ้น
Yibo Yang

1
วิธีแก้ปัญหาที่ฉันไม่มีสิทธิ์เข้าถึง sudo และไม่ได้ติดตั้ง xclip ??
DanGordon

179

บน OS X ให้ใช้pbcopy; pbpasteไปในทิศทางตรงกันข้าม

pbcopy < .ssh/id_rsa.pub

14
Yups! เช่นเดียวนี้ได้เช่น:pbcopy < .ssh/id_rsa.pub
doublejosh

ไม่ทำงานสำหรับคำสั่งเอาต์พุตเช่นpbcopy < git merge-base master some-branch
เบ็น

ถ้าคุณใช้ tmux มันจะไม่ทำงานจนกว่าคุณจะทำการเชื่อมต่อเซสชันอีกครั้ง: superuser.com/a/413233/146254
Atav32

1
คุณยังสามารถใช้ cat ได้หากคุณใช้งานได้แล้ว: cat file.txt | pbcopy
rtrigoso

3
ฉันรู้ว่าความคิดเห็นนั้นอายุ 5 ปี แต่ในกรณีที่มีคนสะดุดกับเรื่องนี้ในอนาคตเพื่อใช้กับคำสั่งส่งออกให้ทำgit merge-base master some-branch | pbcopy
Sam

62

ฉันได้สร้างเครื่องมือสำหรับ Linux / OSX / Cygwin ที่คล้ายกับของบางอย่าง แต่ไม่ซ้ำกัน ฉันเรียกมันว่าcbและมันสามารถพบได้ในแก่นสาร githubนี้

ในส่วนสำคัญฉันแสดงให้เห็นถึงวิธีการคัดลอกและวางผ่าน commandline โดยใช้ Linux, macOS และ Cygwin

ลินุกซ์

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

MacOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

หมายเหตุ: ฉันเดิมเพียงแค่ตั้งใจที่จะกล่าวถึงนี้ในความคิดเห็นของฉันไปที่คำตอบบ๊อบ Enohp ของ แต่แล้วฉันก็ตระหนักว่าฉันควรเพิ่ม README ในส่วนสำคัญของฉัน เนื่องจากตัวแก้ไขส่วนสำคัญไม่ได้ให้ภาพตัวอย่างมาร์กดาวน์ฉันจึงใช้กล่องคำตอบที่นี่และหลังจากคัดลอก / วางความคิดส่วนสำคัญของฉัน "ฉันอาจส่งคำตอบด้วย"

CB

ทีป้องกันการรั่วที่คลิปบอร์ด

สคริปต์นี้เป็นแบบอย่างหลังจากtee(ดูman tee)

มันเหมือนกับคำสั่งการคัดลอกและวางปกติของคุณ แต่รวมและสามารถรับรู้ได้เมื่อคุณต้องการให้สามารถโยงได้

ตัวอย่าง

สำเนา

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

วาง

# 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

ผูกมัด

$ 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

คัดลอกผ่านการเปลี่ยนเส้นทางไฟล์

(ตามลำดับเวลามันทำให้รู้สึกถึงการสาธิตนี้ในตอนท้าย)

# 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

สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันที่จะคัดลอกเอาต์พุตคำสั่งไปยังคลิปบอร์ดใน terminal บน macOS ขอบคุณ!
Joshua Dyck

46

ฉันเขียนสคริปต์เล็ก ๆ น้อย ๆ นี้เพื่อเดาคำสั่งคัดลอก / วาง

สคริปต์เวอร์ชัน Linux อาศัย xclip ที่ติดตั้งในระบบของคุณแล้ว สคริปต์นี้เรียกว่าคลิปบอร์ด

#!/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

สคริปต์เวอร์ชัน OS X อาศัยการทำงานของ pbcopy และ pbpaste ซึ่งติดตั้งไว้ล่วงหน้าใน Macs ทั้งหมด

#!/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

การใช้สคริปต์นั้นง่ายมากเนื่องจากคุณเพียงแค่ไพพ์เข้าหรือออกจากclipboardที่แสดงในตัวอย่างทั้งสองนี้

$ cat file | clipboard

$ clipboard | less

3
ฉันใช้ชื่อpbcopyและpbpasteบน Linux ดังนั้นจึงใช้งานได้ทั้ง Linux และ OS X
StackedCrooked

ในการทำให้สคริปต์ทำงานได้ทั่วโลกใน ubuntu: * บันทึกที่~/.scripts/clipboard * ทำให้เป็นไฟล์ปฏิบัติการchmod +x ~/.scripts/clipboard สำหรับทุบตี: * เพิ่มexport PATH=$PATH:~/.scriptsไปที่ส่วนท้ายของ~/.bashrc fish: * เพิ่มset PATH ~/.scripts $PATHไปที่~/.config/fish/fish.config หากไม่มีไฟล์หรือโฟลเดอร์ใด ๆ
ฮอกกี้

2
นอกจากนี้คุณยังสามารถรวมสคริปต์นี้เป็นฟังก์ชันclipboard(){ ... }และวางลงใน. bashrc
เซบาสเตียนโนวัก

สิ่งนี้คล้ายกับที่ฉันทำ แต่ฉันอนุญาตให้ผูกมัดdate | cb | tee -a updates.logได้ ที่จะส่งdateออกคำสั่งไปยังคลิปบอร์ดและผ่านมันไปพร้อมกับคำสั่งที่ผนวกไปยังแฟ้มและผ่านมันไปให้tee -a stdoutแต่มันก็เหมือนกับ " แท่นทีป้องกันการรั่วที่คลิปบอร์ด" เพราะถ้าคุณเพิ่งทำdate | cbคุณจะไม่ได้เอาต์พุต และในที่สุดมันก็ทำcb > file.txt gist.github.com/RichardBronosky/ ด้วย
Bruno Bronosky

หนึ่งข้อเสนอแนะ - ถอดอักขระขึ้นบรรทัดใหม่เพื่อหลีกเลี่ยงการดำเนินการคำสั่งในการวาง (เช่นหากการคัดลอกวางเส้นทาง) ฉันทำเช่นนั้นโดยแก้ไขคำสั่งxclip -i -selection clipboardเป็นxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

เพิ่มไปยังของคุณ~/.bashrc:

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

ตอนนี้คลิปpวางและสำเนาcคลิป - แต่คุณสามารถทำสิ่งที่นักเล่น:

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

↑เยื้องคลิปบอร์ดของคุณ เหมาะสำหรับไซต์ที่ไม่มี{ }ปุ่มสแต็กล้น

คุณสามารถเพิ่มได้โดยใช้สิ่งนี้:

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

โปรดยกตัวอย่างการใช้งานโปรด
Ulf Aslak

7

ฉันใช้ Parcellite และxselคัดลอกข้อความยืนยันล่าสุดgitไปยังผู้จัดการคลิปบอร์ดของฉัน (ด้วยเหตุผลบางอย่างxclipไม่ทำงาน):

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

7

โดยไม่ต้องใช้เครื่องมือภายนอกหากคุณกำลังเชื่อมต่อกับมุมมองเซิร์ฟเวอร์ SSH นี่เป็นคำสั่งที่ค่อนข้างง่าย:

จากพรอมต์คำสั่งของ Windows 7+:

ssh user@server cat /etc/passwd | clip

สิ่งนี้จะนำเนื้อหาของไฟล์ระยะไกลไปยังคลิปบอร์ดในเครื่องของคุณ

(คำสั่งนั้นต้องการการเรียกใช้ Pageant สำหรับรหัสหรือจะขอรหัสผ่านจากคุณ)


1
@AfshinMoazami ชื่อเรื่องและคำถามนั้นเป็นเรื่องทั่วไปเพียงคำแนะนำแท็กสำหรับระบบ unix และคำตอบของฉันครอบคลุมกรณีเมื่อคุณพยายามรับวันที่จากเซิร์ฟเวอร์ unix ไปยังเครื่อง Windows ซึ่งอาจเป็นประโยชน์ต่อผู้อ่านในอนาคต
d.raev

1
โหวตขึ้นเพราะใช่มีประโยชน์สำหรับผู้ดูแลระบบ Windows ที่มี Powershell เล่นกับในเครื่องเท่านั้น (ถึงตอนนี้ด้วย LSW ที่ใช้งานได้จริงฉันสามารถส่งไปทุบตีโดยตรงจาก Powershell และทำสิ่งที่ฉันชอบจากที่นั่น)
flith

มันทำงานบน DOS พรอมต์เช่นเดียวกับคอมไพล์ทุบตีบน windows 10 เช่นecho Hello World | clip

5

สำหรับ mac นี่เป็นวิธีตัวอย่างในการคัดลอก (ลงในคลิปบอร์ด) วาง (จากคลิปบอร์ด) โดยใช้บรรทัดคำสั่ง

คัดลอกผลลัพธ์ของpwdคำสั่งไปยังคลิปบอร์ดเป็น

$ pwd | pbcopy

ใช้เนื้อหาในคลิปบอร์ดเป็น

$ cd $(pbpaste)

3

ฉันทำเครื่องมือขนาดเล็กที่มีฟังก์ชั่นที่คล้ายกันโดยไม่ใช้ xclip หรือ xsel stdoutถูกคัดลอกไปยังคลิปบอร์ดและสามารถวางอีกครั้งในเทอร์มินัล ดู:

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

โปรดทราบว่าเครื่องมือนี้ไม่จำเป็นต้องมี X-session คลิปบอร์ดสามารถใช้ภายในเทอร์มินัลและไม่ต้องวางโดยCtrl+Vหรือคลิกเมาส์กลางใน X-windows อื่น ๆ



2

จากโพสต์ก่อนหน้าฉันลงเอยด้วยโซลูชันนามแฝงน้ำหนักต่อไปนี้ซึ่งสามารถเพิ่มลงใน.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

ตัวอย่าง:

# 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

ผมมาจากพื้นหลังปล้นลง KDE และไม่ได้มีการเข้าถึงxclip, xselหรือสิ่งแฟนซีอื่น ๆ ฉันมี TCSH Konsole เพื่อทำให้เรื่องแย่ลง

requisites: qdbus klipper xargs bash

foo.shสร้างปฏิบัติการทุบตี

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

หมายเหตุ:ต้องเป็น bash เนื่องจาก TCSH ไม่สนับสนุนอาร์กิวเมนต์หลายบรรทัด

ตามด้วยนามแฝง tcsh .cshrcใน

alias clipboard xargs -0 /path/to/foo

คำอธิบาย:

xargs -0ท่อ stdin เป็นอาร์กิวเมนต์เดียว เรื่องนี้จะถูกส่งไปปฏิบัติการทุบตีซึ่งจะส่งคำขอ "คัดลอกไปยังคลิปบอร์ด" เพื่อใช้klipper qdbusไพพ์ถึง/dev/nullคือไม่พิมพ์อักขระบรรทัดใหม่ที่ส่งคืนโดยqdbusไปยังคอนโซล

ตัวอย่างการใช้งาน:

ls | clipboard

สิ่งนี้จะคัดลอกเนื้อหาของโฟลเดอร์ปัจจุบันไปยังคลิปบอร์ด

หมายเหตุ: ใช้งานได้เป็นไปป์เท่านั้น ใช้ bash executable โดยตรงหากคุณต้องการคัดลอกอาร์กิวเมนต์


1

ฉันมักจะเรียกใช้คำสั่งนี้เมื่อฉันต้องคัดลอกของฉันssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v ที่อื่น ๆ



0

สำหรับผู้ที่ใช้ bash ติดตั้งบนระบบ windows (เรียกว่าระบบย่อย Windows สำหรับ Linux (WSL)) การลอง xclip จะทำให้เกิดข้อผิดพลาด:

Error: Can't open display: (null)

ให้จำไว้ว่าระบบย่อย linux สามารถเข้าถึงโปรแกรมปฏิบัติการ windows ได้แทน เป็นไปได้ที่จะใช้ clip.exe เช่น

echo hello | clip.exe

ซึ่งอนุญาตให้คุณใช้คำสั่ง paste (ctrl-v)


1
โปรดทราบว่าหากติดตั้ง xserver (เช่น vcxsvr หรือ xming) บน windows หน้าจอจะแสดงขึ้นและ xclipboard ทำงานอยู่คุณสามารถใช้ xclip ได้จริง
bitbyte

0

เพียงเพื่อครอบคลุมกรณีขอบ :) และเนื่องจากชื่อคำถามถาม (อย่างน้อยตอนนี้) วิธีการคัดลอกผลลัพธ์ของคำสั่งโดยตรงไปยังคลิปบอร์ด

บ่อยครั้งที่ฉันพบว่ามีประโยชน์ในการคัดลอกเอาต์พุตของคำสั่งหลังจากดำเนินการไปแล้วและฉันไม่ต้องการหรือไม่สามารถเรียกใช้คำสั่งอีกครั้งได้

สำหรับสถานการณ์นี้เราสามารถใช้ gdm หรือยูทิลิตี้ของเมาส์ที่คล้ายกันและเลือกโดยใช้เมาส์ apt-get install gdmจากนั้นคลิกขวาหรือทั้งชุด Cntrl + Shift + c และ Cntrl + Shift + v เพื่อคัดลอกและวางในเทอร์มินัล

หรือซึ่งเป็นวิธีที่ต้องการสำหรับฉัน (เนื่องจากเมาส์ไม่สามารถเลือกได้อย่างถูกต้องภายในหนึ่งบานหน้าต่างเมื่อคุณมีหลายบานหน้าต่างด้านข้างและคุณต้องเลือกมากกว่าหนึ่งบรรทัด) โดยใช้ tmux เราสามารถคัดลอกลงใน tmux buffer โดยใช้มาตรฐาน [, เว้นวรรค, ย้ายเพื่อเลือก, ใส่หรือคุณสามารถเลือกบล็อคของรหัสได้ นอกจากนี้ยังมีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อคุณอยู่ในหนึ่งในช่องทางของ cli multiplexer เช่น tmux และคุณต้องเลือกกลุ่มข้อความ แต่ไม่ใช่หมายเลขบรรทัด (ตั้งค่า vim ของฉันแสดงหมายเลขบรรทัด)

หลังจากนี้คุณสามารถใช้คำสั่ง:

tmux save-buffer - | xclip -i

แน่นอนคุณสามารถนามแฝงกับสิ่งที่คุณชอบหรือผูกโดยตรงในไฟล์การกำหนดค่า tmux

นี่เป็นเพียงการให้คำตอบทางแนวคิดแก่คุณเพื่อครอบคลุมกรณีขอบนี้เมื่อไม่สามารถดำเนินการคำสั่งอีกครั้งได้ หากคุณต้องการตัวอย่างโค้ดเฉพาะเจาะจงมากขึ้นให้ฉันรู้

ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.