ฉันจะไพพ์เอาต์พุตของคำสั่งลงในคลิปบอร์ดของฉันและวางกลับเมื่อใช้เทอร์มินัลได้อย่างไร ตัวอย่างเช่น
cat file | clipboard
apt install xclip
และcat file | xclip -sel clip
ฉันจะไพพ์เอาต์พุตของคำสั่งลงในคลิปบอร์ดของฉันและวางกลับเมื่อใช้เทอร์มินัลได้อย่างไร ตัวอย่างเช่น
cat file | clipboard
apt install xclip
และcat file | xclip -sel clip
คำตอบ:
ฉันต้องการทำสิ่งนี้เสมอและพบวิธีที่ดีและง่ายในการทำเช่นนั้น ฉันจดขั้นตอนที่สมบูรณ์ไว้ในกรณีที่คนอื่นต้องการ
ก่อนติดตั้งโปรแกรม 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
alias "cs=xclip -selection clipboard"
และalias "vs=xclip -o -selection clipboard"
เพื่อให้การคัดลอก / วางจากคลิปบอร์ดของระบบง่ายขึ้น
บน OS X ให้ใช้pbcopy
; pbpaste
ไปในทิศทางตรงกันข้าม
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
ฉันได้สร้างเครื่องมือสำหรับ Linux / OSX / Cygwin ที่คล้ายกับของบางอย่าง แต่ไม่ซ้ำกัน ฉันเรียกมันว่าcb
และมันสามารถพบได้ในแก่นสาร githubนี้
ในส่วนสำคัญฉันแสดงให้เห็นถึงวิธีการคัดลอกและวางผ่าน commandline โดยใช้ Linux, macOS และ Cygwin
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
หมายเหตุ: ฉันเดิมเพียงแค่ตั้งใจที่จะกล่าวถึงนี้ในความคิดเห็นของฉันไปที่คำตอบบ๊อบ Enohp ของ แต่แล้วฉันก็ตระหนักว่าฉันควรเพิ่ม README ในส่วนสำคัญของฉัน เนื่องจากตัวแก้ไขส่วนสำคัญไม่ได้ให้ภาพตัวอย่างมาร์กดาวน์ฉันจึงใช้กล่องคำตอบที่นี่และหลังจากคัดลอก / วางความคิดส่วนสำคัญของฉัน "ฉันอาจส่งคำตอบด้วย"
สคริปต์นี้เป็นแบบอย่างหลังจาก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
ฉันเขียนสคริปต์เล็ก ๆ น้อย ๆ นี้เพื่อเดาคำสั่งคัดลอก / วาง
สคริปต์เวอร์ชัน 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
pbcopy
และpbpaste
บน Linux ดังนั้นจึงใช้งานได้ทั้ง Linux และ OS X
~/.scripts/clipboard
* ทำให้เป็นไฟล์ปฏิบัติการchmod +x ~/.scripts/clipboard
สำหรับทุบตี: * เพิ่มexport PATH=$PATH:~/.scripts
ไปที่ส่วนท้ายของ~/.bashrc
fish: * เพิ่มset PATH ~/.scripts $PATH
ไปที่~/.config/fish/fish.config
หากไม่มีไฟล์หรือโฟลเดอร์ใด ๆ
clipboard(){ ... }
และวางลงใน. bashrc
date | cb | tee -a updates.log
ได้ ที่จะส่งdate
ออกคำสั่งไปยังคลิปบอร์ดและผ่านมันไปพร้อมกับคำสั่งที่ผนวกไปยังแฟ้มและผ่านมันไปให้tee -a
stdout
แต่มันก็เหมือนกับ " แท่นทีป้องกันการรั่วที่คลิปบอร์ด" เพราะถ้าคุณเพิ่งทำdate | cb
คุณจะไม่ได้เอาต์พุต และในที่สุดมันก็ทำcb > file.txt
gist.github.com/RichardBronosky/ ด้วย
xclip -i -selection clipboard
เป็นxargs echo -n | xclip -i -selection clipboard
เพิ่มไปยังของคุณ~/.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
ฉันใช้ Parcellite และxsel
คัดลอกข้อความยืนยันล่าสุดgit
ไปยังผู้จัดการคลิปบอร์ดของฉัน (ด้วยเหตุผลบางอย่างxclip
ไม่ทำงาน):
$ git log -1 --pretty=%B | xsel -i -b
โดยไม่ต้องใช้เครื่องมือภายนอกหากคุณกำลังเชื่อมต่อกับมุมมองเซิร์ฟเวอร์ SSH นี่เป็นคำสั่งที่ค่อนข้างง่าย:
จากพรอมต์คำสั่งของ Windows 7+:
ssh user@server cat /etc/passwd | clip
สิ่งนี้จะนำเนื้อหาของไฟล์ระยะไกลไปยังคลิปบอร์ดในเครื่องของคุณ
(คำสั่งนั้นต้องการการเรียกใช้ Pageant สำหรับรหัสหรือจะขอรหัสผ่านจากคุณ)
สำหรับ mac นี่เป็นวิธีตัวอย่างในการคัดลอก (ลงในคลิปบอร์ด) วาง (จากคลิปบอร์ด) โดยใช้บรรทัดคำสั่ง
คัดลอกผลลัพธ์ของpwd
คำสั่งไปยังคลิปบอร์ดเป็น
$ pwd | pbcopy
ใช้เนื้อหาในคลิปบอร์ดเป็น
$ cd $(pbpaste)
ฉันทำเครื่องมือขนาดเล็กที่มีฟังก์ชั่นที่คล้ายกันโดยไม่ใช้ xclip หรือ xsel stdout
ถูกคัดลอกไปยังคลิปบอร์ดและสามารถวางอีกครั้งในเทอร์มินัล ดู:
https://sourceforge.net/projects/commandlinecopypaste/
โปรดทราบว่าเครื่องมือนี้ไม่จำเป็นต้องมี X-session คลิปบอร์ดสามารถใช้ภายในเทอร์มินัลและไม่ต้องวางโดยCtrl+Vหรือคลิกเมาส์กลางใน X-windows อื่น ๆ
ใน Linux ที่ติดตั้ง xclip:
xclip - เลือกคลิปบอร์ด <ไฟล์
จากโพสต์ก่อนหน้าฉันลงเอยด้วยโซลูชันนามแฝงน้ำหนักต่อไปนี้ซึ่งสามารถเพิ่มลงใน.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
ผมมาจากพื้นหลังปล้นลง 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 โดยตรงหากคุณต้องการคัดลอกอาร์กิวเมนต์
ฉันมักจะเรียกใช้คำสั่งนี้เมื่อฉันต้องคัดลอกของฉันssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
ที่อื่น ๆ
บน Wayland xcopy ไม่ทำงานให้ใช้wl-clipboardแทน เช่นใน fedora
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
สำหรับผู้ที่ใช้ bash ติดตั้งบนระบบ windows (เรียกว่าระบบย่อย Windows สำหรับ Linux (WSL)) การลอง xclip จะทำให้เกิดข้อผิดพลาด:
Error: Can't open display: (null)
ให้จำไว้ว่าระบบย่อย linux สามารถเข้าถึงโปรแกรมปฏิบัติการ windows ได้แทน เป็นไปได้ที่จะใช้ clip.exe เช่น
echo hello | clip.exe
ซึ่งอนุญาตให้คุณใช้คำสั่ง paste (ctrl-v)
เพียงเพื่อครอบคลุมกรณีขอบ :) และเนื่องจากชื่อคำถามถาม (อย่างน้อยตอนนี้) วิธีการคัดลอกผลลัพธ์ของคำสั่งโดยตรงไปยังคลิปบอร์ด
บ่อยครั้งที่ฉันพบว่ามีประโยชน์ในการคัดลอกเอาต์พุตของคำสั่งหลังจากดำเนินการไปแล้วและฉันไม่ต้องการหรือไม่สามารถเรียกใช้คำสั่งอีกครั้งได้
สำหรับสถานการณ์นี้เราสามารถใช้ gdm หรือยูทิลิตี้ของเมาส์ที่คล้ายกันและเลือกโดยใช้เมาส์ apt-get install gdm
จากนั้นคลิกขวาหรือทั้งชุด Cntrl + Shift + c และ Cntrl + Shift + v เพื่อคัดลอกและวางในเทอร์มินัล
หรือซึ่งเป็นวิธีที่ต้องการสำหรับฉัน (เนื่องจากเมาส์ไม่สามารถเลือกได้อย่างถูกต้องภายในหนึ่งบานหน้าต่างเมื่อคุณมีหลายบานหน้าต่างด้านข้างและคุณต้องเลือกมากกว่าหนึ่งบรรทัด) โดยใช้ tmux เราสามารถคัดลอกลงใน tmux buffer โดยใช้มาตรฐาน [, เว้นวรรค, ย้ายเพื่อเลือก, ใส่หรือคุณสามารถเลือกบล็อคของรหัสได้ นอกจากนี้ยังมีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อคุณอยู่ในหนึ่งในช่องทางของ cli multiplexer เช่น tmux และคุณต้องเลือกกลุ่มข้อความ แต่ไม่ใช่หมายเลขบรรทัด (ตั้งค่า vim ของฉันแสดงหมายเลขบรรทัด)
หลังจากนี้คุณสามารถใช้คำสั่ง:
tmux save-buffer - | xclip -i
แน่นอนคุณสามารถนามแฝงกับสิ่งที่คุณชอบหรือผูกโดยตรงในไฟล์การกำหนดค่า tmux
นี่เป็นเพียงการให้คำตอบทางแนวคิดแก่คุณเพื่อครอบคลุมกรณีขอบนี้เมื่อไม่สามารถดำเนินการคำสั่งอีกครั้งได้ หากคุณต้องการตัวอย่างโค้ดเฉพาะเจาะจงมากขึ้นให้ฉันรู้
ไชโย