อะไรที่เหมือนกับ pbcopy ของ Linux สำหรับ OSX


141

ในเทอร์มินัลใน OSX ฉันสามารถไพพ์เอาต์พุตไปยัง pbcopy แล้วไปที่เว็บเบราว์เซอร์และวาง ฉันลองมันใน Linux ด้วย xcopy แต่เมื่อฉันเปลี่ยนไปใช้เบราว์เซอร์มันก็แค่เขียนทับคลิปบอร์ดด้วยอะไรก็ตามที่มันอยู่ในครั้งล่าสุดที่ใช้เบราว์เซอร์ pbcopy ใน Linux ทำงานอย่างไร


2
... และสำหรับผู้ที่ไม่ทราบว่า pbcopy คืออะไรนี่คือนักพัฒนา
Rob Cowell

เครื่องมือที่มีประโยชน์กับสิ่งนี้คือClipIt (และผู้จัดการคลิปบอร์ดที่คล้ายกัน) ไม่เพียงเล่นในเทอร์มินัลเท่านั้น แต่ยังรักษาประวัติคลิปบอร์ด มีประโยชน์มากทีเดียว
brandizzi

คำตอบ:


162

หากคุณติดตั้ง X คุณอาจลองใช้ xsel ด้วยวิธีนี้:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

หรือด้วย xclip:

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

ตอนนี้คุณสามารถใช้ 'em:

echo 'go to my clipboard' | pbcopy

เมื่อฉันไม่มี XI ใช้ฟังก์ชันการทำงานของหน้าจอ GNU เพื่อคัดลอกระหว่างเชลล์ที่เปิดอยู่ในเซสชันโดยใช้แป้นพิมพ์

เพื่อคัดลอก: Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

เพื่อวาง: Ctrl-a + ]

* การเคลื่อนไหวเสร็จสิ้นด้วยเสียงเรียกเข้าเช่นการผูกคีย์ (j, k, l & m)


1
ขอบคุณนี่เป็นข้อมูลที่ฉันต้องการ ดังนั้นตอนนี้ฉันสงสัยว่ามีวิธีที่ฉันสามารถสร้างหน้าจอให้ฉันใช้คำสั่ง Emacs เพื่อเลือกพื้นที่ที่ฉันต้องการคัดลอก ...
Noah Sussman

8
xsel: ไม่สามารถเปิดการแสดงผล: (null): ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์
itsazzad

ฉันแก้ไขปัญหา "ไม่สามารถเปิดการแสดงผล" บน Windows โดยการติดตั้งXmingและการตั้งค่า DISPLAY =: 0
scottgwald

1
สำหรับผู้ใช้ tmux มันเป็นเหมือนCtrl-b, [ -> go to position -> Space -> select texts -> EnterและวางโดยCtrl-b, ]
el que m'est

เมื่อใดก็ตามที่เป็นไปได้ว่านี้คือสิ่งที่ถาวรที่คุณต้องการแน่นอนมากกว่าการแทรกซ้อน namespace /bin/ของคุณด้วยรอยหยักในโปรไฟล์ของคุณมันจะดีกว่าที่จะสร้างสคริปต์ขั้นพื้นฐานสำหรับการนี้ โดยเฉพาะอย่างยิ่งถ้าคุณแชร์โปรไฟล์ระหว่างเครื่อง macOS และ linux
เบนจามินอาร์

9

ใส่สคริปต์แบบนี้เรียกว่า pbcopy ในโฟลเดอร์ bin ของคุณ:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

สิ่งนี้จะทำให้ STDIN ทั้งในบัฟเฟอร์ที่คุณเลือกและคลิปบอร์ด:

echo Hello world |pbcopy

ทำไมถึงcatเป็นสิ่งจำเป็น? มันจะไม่เปลี่ยนเส้นทาง stdin ไปยัง stdout ในกรณีนี้ดังนั้นการทำทารุณกรรมแมวที่ไร้ประโยชน์หรือฉันขาดอะไรไป?
Hultner

2
คุณพูดถูกมันดูเหมือนว่าแมวไร้ประโยชน์ :-)
Erik

2
หากคุณ (เช่นฉัน) สงสัยว่าแมว "ไร้ประโยชน์" อยู่ที่ไหนมันถูกลบโดยการแก้ไข NTS: ในกรณีที่ความคิดเห็นสับสนให้ตรวจสอบประวัติ ^^ '
yaitloutou

คุณจะวางเนื้อหาหลังจากใช้งานได้อย่างไร แค่ใช้xclip -o? หรือมีวิธีที่ดีกว่า
n1k31t4

@ n1k31t4 สิ่งที่ผมทำก็คือทำให้สคริปต์เทียบเท่าใช้สำหรับสคริปต์ที่xclip -sel c -o /bin/pbpaste
เบนจามินอาร์

5

หากต้องการขยายโซลูชันของ @Erik และ @xpixelz สคริปต์ทั้งสองนี้ควรทำงานกับทั้งสองแพลตฟอร์ม:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi

แต่ทำไมคุณถึงมีสคริปต์นี้ใน OS X ซึ่งเป็นส่วนหนึ่งของ userland ดั้งเดิม
Hultner

* เป็นข้อมูลอ้างอิงสำหรับการทำงานที่คล้ายกัน * dotfiles ข้ามแพลตฟอร์ม: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner

ยังคงใช้แมวในทางที่ผิดและทำไมไม่ตรวจสอบว่ามี xclip อยู่หรือไม่และกำหนดนามแฝงถ้าใช่ หรือตรวจสอบว่าไบนารี pbpaste มีอยู่ก็จะเป็นตัวเลือก การตรวจสอบ uname ดูเหมือนเป็นวิธีที่แปลกไปสู่ปัญหา
Hultner

2
@Hultner "การตรวจสอบ uname ดูเหมือนจะเป็นวิธีการที่แปลกไปสู่ปัญหา" คุณสามารถตรวจสอบไบนารีโดยเฉพาะอย่างยิ่งตามลำดับโดยมีข้อยกเว้น a ${a:-${b:-${c:+${d}}}}และการกำหนดตัวแปรtype -P/ บางส่วน hasและ / bin / test exec
Wes Turner

2

คำตอบนี้อ้างถึง Linux Subsystem สำหรับ Windows

คำตอบสั้น ๆ : ใช้clip.exeราวกับว่ามันเป็นpbcopyเพื่อที่จะนำบางสิ่งบางอย่างไว้ในคลิปบอร์ดของ Windows มันวิเศษ ตัวอย่างecho "Hello Windows" | clip.exeในเทอร์มินัล bash หรือ Ubuntu bash จากนั้น `ctrl-v 'ในโปรแกรม Windows

บริบทเพิ่มเติม:

ในความคิดเห็นข้างต้นฉันพูดถึงว่าเมื่อใช้ Xming บน Windows เพื่อเปิดใช้งานฟังก์ชั่นนี้จำเป็นต้องตั้งค่าตัวแปร DISPLAY ( export DISPLAY=:0ในหลาย ๆ กรณี) ก่อนที่จะแก้ปัญหาxselและxclipทำงาน โซลูชั่นนี้ทำงานในลักษณะที่ไม่น่าเชื่อถือและสุ่มเมื่อวางจาก Linux ไปยัง Windows การกดctrl-vระหว่างหนึ่งถึงสิบครั้งทำให้คลิปบอร์ดถูกวาง (ครั้งเดียว) (นี่คือ Windows 10 Surface Book 2 ของฉัน) clip.exeไม่ต้องเสียเวลาของคุณให้ใช้

หมายเหตุ: .exeอย่าลืม มิฉะนั้น Ubuntu bash จะแนะนำให้คุณติดตั้งแพ็คเกจ Linux geomviewซึ่งไม่ใช่สิ่งที่คุณต้องการ

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