Chuyển đến / từ bảng ghi tạm trong tập lệnh Bash


946

Có thể chuyển sang / từ bảng tạm trong Bash không?

Cho dù đó là đường ống đến / từ tay cầm thiết bị hoặc sử dụng ứng dụng phụ trợ, tôi không thể tìm thấy bất cứ điều gì.

Ví dụ: nếu /dev/cliplà một thiết bị liên kết với bảng tạm, chúng ta có thể làm:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

3
Tôi đã sử dụng :%y+trong vim, đó là vim-speak cho "yank (sao chép) tất cả các dòng vào thanh ghi '+' ( PRIMARYbảng tạm X )". Bạn có thể thay thế %bằng một phạm vi nếu bạn muốn được cụ thể. Nhưng có ba cảnh báo: 1. Bây giờ, bạn phải lưu bất kỳ văn bản nào vào một tệp trước khi bạn có thể sao chép nó. Điều này trái ngược với xcliplệnh được đề cập trong các câu trả lời. 2. Nếu bạn chưa biết cách vim, điều này có thể tẻ nhạt. 3. Bạn chỉ có thể làm điều này nếu một tính năng nhất định được bật khi biên dịch vim. Nếu bạn cài đặt GVim, nó sẽ được bật theo mặc định trong cả phiên bản GUI và thiết bị đầu cuối của vim.
Braden hay nhất

1
@BradenBest bạn nên đặt câu hỏi này làm câu trả lời. Tôi đang ở trong môi trường NIX và không thể cài đặt xclip. Câu trả lời của bạn làm việc như một lá bùa.
HankCa

@HankCa Được rồi, tôi đã đăng câu trả lời . Nói cho tôi biết bạn nghĩ gì.
Braden hay nhất

@BradenBest đó là một câu trả lời rất toàn diện. Tôi chỉ thích :%y+một cái nhưng ok, bạn đã có tất cả các cơ sở! Tốt một.
HankCa

Một tùy chọn khác: sử dụng một tập lệnh perl nhỏ: không cần cài đặt. Xem câu trả lời của tôi dưới đây .
VonC

Câu trả lời:


863

Có rất nhiều clipboards bạn có thể xử lý. Tôi hy vọng bạn có thể là người dùng Linux muốn đặt nội dung vào bảng tạm của X Windows. Thông thường, bảng tạm bạn muốn nói chuyện có một tiện ích cho phép bạn nói chuyện với nó.

Trong trường hợp của X, có xclip(và những người khác). xclip -selection csẽ gửi dữ liệu vào bảng tạm làm việc với Ctrl + C, Ctrl + Vtrong hầu hết các ứng dụng.

Nếu bạn đang dùng Mac OS X, thì có pbcopy.

Nếu bạn đang ở chế độ thiết bị đầu cuối Linux (không có X) thì hãy nhìn vào gpmhoặc màn hình có bảng tạm. Hãy thử screenlệnh readreg.

Trong Windows 10+ hoặc cygwin, sử dụng /dev/clipboardhoặc clip.



24
trên Windows, /dev/clipboardcũng hoạt động với shell bash Msys / MinGW
Mihai Rotaru

71
Lưu ý rằng xclip -selection csẽ gửi dữ liệu vào bảng tạm hoạt động với ^ C, ^ V trong hầu hết các ứng dụng
Klaas van Schelven

31
trên cửa sổ phiên bản mới hơn, bạn chỉ có thể sử dụng clipnhư thế này:dir | clip
maep

11
Thật đáng buồn khi GNU / Linux không có thiết bị như /dev/clipboardvậy và buộc phải cài đặt xclip hoặc gpm bị thiếu theo mặc định ít nhất là trong Kubfox (tôi đoán trong hầu hết các bản phát hành khác) .
Hi-Angel

282

Đảm bảo rằng bạn đang sử dụng alias xclip="xclip -selection c" nếu không bạn chỉ có thể sử dụng để Ctrl+ vdán lại ở một nơi khác.

echo test | xclip    

Ctrl+v === test


1
Làm thế nào một người sẽ đi về dán nó mà không có đối số lệnh đó?
Giô-na

15
xclip -selection clipboard -o
doug 18/12/13

32
kể từ khi tôi qua lại giữa osx và linux, tôi có các mục sau trong dotfiles của mình. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Mong rằng sẽ giúp.
doug 18/12/13

15
@ApockofFork, xclipkhông thêm một dòng mới, echolà. Hãy thử printf test | xclip -i -selection clipboard. ( printfkhông thêm một dòng mới trừ khi bạn viết 'test\n'.)
David X

7
Hoặc sử dụng echo -nthay vì printf.
Christian Pietsch

182

Tải về

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Nếu bạn không có quyền truy cập apt-getcũng không pacman, cũng không dnf, các nguồn có sẵn trên sourceforge .

Thiết lập

Bash

Trong ~/.bash_aliases, thêm:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

Đừng quên tải cấu hình mới của bạn bằng cách sử dụng . ~/.bash_aliaseshoặc bằng cách khởi động lại hồ sơ của bạn.

Trong ~/.config/fish/config.fish, thêm:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

Đừng quên khởi động lại cá thể của bạn bằng cách khởi động lại thiết bị đầu cuối của bạn để thay đổi áp dụng.

Sử dụng

Bây giờ bạn có thể sử dụng setclipgetclip, ví dụ:

$ echo foo | setclip
$ getclip
foo

3
Đối với tất cả các bản phát hành khác: bạn có thể tải xuống nguồn từ sourceforge.net/projects/xclip
Scz 6/07/2015

+1 Giải pháp tốt nhất! Trong Arch , sudo pacman -S xclip. Nhưng lưu ý rằng đó .bashrckhông phải là nơi tốt nhất. Tôi khuyên người dùng nên đọc các tệp bashrc, bash_aliases và .profile thích hợp và cách bash xử lý từng tệp. Mẹo: thay vào đó hãy đặt nó vào .bash_aliases.
eduncan911

1
Cảm ơn @ eduncan911! :) Đã thêm tùy chọn sử dụng pacmantrình quản lý gói và xóa .bashrcđề xuất. Tôi biết .bash_aliaseslà thích nghi hơn, nhưng kết quả cuối cùng là như nhau ( .bashrcđơn giản là yêu cầu .bash_aliasesnếu nó tồn tại). Nếu mọi người muốn một hệ thống lộn xộn, hãy để họ có một hệ thống. :)
tleb

@EladTabak Chúc mừng nó đã giúp.
tleb

1
@jpaugh bạn đúng rồi. .bashrcnguồn của tôi .bash_aliasesở cuối. ;) Tôi tuân theo quy ước cũ này, vẫn tương thích 100% trên các biến thể Arch, Ubuntu / Debian, Raspberry, macOS / OSX và Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_ ware Với quy ước đó, tôi sử dụng cùng một máy chấm Tôi chạm vào. Nó khá hay: github.com/eduncan911/dotfiles
eduncan911

143

Trên macOS sử dụng các lệnh pbcopypbpastelệnh tích hợp.

Ví dụ: nếu bạn chạy

cat ~/.bashrc | pbcopy

nội dung của ~/.bashrctệp sẽ có sẵn để dán bằng phím tắt Cmd+ v.



25

xsel trên Debian / Ubuntu / Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Tải về

sudo apt-get install xsel

Điều này khác với echo "foo" | xclip -selection cnhư thế nào?
Léo Léopold Hertz

Có một số câu trả lời trên câu hỏi Hỏi Ubuntu này , nhưng chủ yếu xselxcliptương đương theo mọi cách ngoại trừ việc xclipcó thể đọc / ghi tệp theo tên, nhưng xselyêu cầu chuyển hướng shell nếu bạn muốn truy cập tệp.
Colin D Bennett

xselđang hoạt động độc đáo từ các tập lệnh, trong khi xclip chỉ hoạt động từ dấu nhắc. Không chắc chắn lý do tại sao.
NVRM

16

Ồ, tôi không thể tin có bao nhiêu câu trả lời cho câu hỏi này. Tôi không thể nói rằng tôi đã thử tất cả nhưng tôi đã thử top 3 hoặc 4 và không ai trong số họ làm việc cho tôi. Những gì đã làm cho tôi là một câu trả lời nằm trong một trong những bình luận được viết bởi một người dùng được gọi là doug. Vì tôi thấy nó rất hữu ích, tôi quyết định nghỉ ngơi trong một câu trả lời.

Cài đặt tiện ích xcopy và khi bạn đang ở trong Terminal, hãy nhập:

Sao chép

Thing_you_want_to_copy|xclip -selection c

Dán

myvariable=$(xclip -selection clipboard -o)

Tôi nhận thấy rất nhiều câu trả lời đề nghị pbpaste và pbcopy. Nếu bạn vào các tiện ích đó nhưng vì một số lý do chúng không có sẵn trên repo của bạn, bạn luôn có thể tạo bí danh cho các lệnh xcopy và gọi chúng là pbpaste và pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Vì vậy, nó sẽ trông như thế này:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Tuyệt vời, phần bí danh của bạn tương ứng với MacOS khá tốt.
MeadowMuffins

15

Câu trả lời năm 2018

Sử dụng clipboard-cli . Nó hoạt động với macOS, Windows, Linux, OpenBSD, FreeBSD và Android mà không có bất kỳ vấn đề thực sự nào.

Cài đặt nó với:

npm install -g clipboard-cli

Sau đó bạn có thể làm

echo foo | clipboard

Nếu bạn muốn, bạn có thể bí danh để cbbằng cách đặt sau trong của bạn .bashrc, .bash_profilehoặc .zshrc:

alias cb=clipboard


2
Bạn có chắc chắn rằng đó là một npmgói an toàn ?
Johnny

3
@Stas, tôi hy vọng như vậy, nó được tạo bởi Sindresorhus ( github.com/sindresorhus ), người đóng góp nút nhiều nhất. Ông chịu trách nhiệm cho thư viện thử nghiệm Ava, người nói dối xoong, Yeoman và vô số dự án khác. Anh ta cũng chịu trách nhiệm cho vô số các thư viện nhỏ như thế này, đã cùng nhau đưa mã của mình lên gần như mọi trang web sử dụng JS trên internet. Điều đó không có nghĩa là anh ta không thể bị xâm phạm; chỉ là số lượng mắt trên repos của anh ấy và danh tiếng của anh ấy làm cho nó ít có khả năng hơn nhiều so với hầu hết các repos npm ngẫu nhiên.
Evan Conrad

Mát mẻ! Hoạt động trên Ubuntu GNU / Linux khi xclip không hoạt động.
Kevin Buchs

14

Trên hệ thống con Windows cho Linux, bạn có thể sao chép vào bảng tạm với clip.exe.

cat file | clip.exe

Hãy ghi nhớ để sử dụng |lệnh ống. Và không phải là một >lệnh, vì điều đó sẽ không hoạt động.


11

Dưới đây là một tập lệnh bash sẵn sàng để đọc clipboard hoạt động trên nhiều nền tảng. Vui lòng chỉnh sửa tập lệnh ở đây nếu bạn thêm chức năng (ví dụ: nhiều nền tảng hơn).

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp

Bruhh, điều này thực sự hoạt động tại sao đây không phải là câu trả lời?
255.tar.xz

9

Trên Windows (với Cygwin) thử cat /dev/clipboardhoặc echo "foo" > /dev/clipboardnhư đã đề cập trong này bài viết.


1
Như người dùng @maep đã đề cập trong một nhận xét riêng biệt, các phiên bản Windows mới hơn (tôi chỉ có thể xác nhận cho Win10) có thể đơn giản chuyển sang clip. Tôi đang sử dụng msysgit 1.9.5 và điều này đã hoạt động.
Shawn Erquhart

echo "foo" > /dev/clipboarddường như phá hủy hoàn toàn các dòng mới (không phải là một thứ \ r \ n \ n nhưng đã biến mất hoàn toàn)
user1529413

9

Chỉ dành cho máy Mac:

echo "Hello World" | pbcopy
pbpaste

Đây là những vị trí /usr/bin/pbcopy/usr/bin/pbpaste.


8

Có nhiều clipboard khác nhau trong Linux; máy chủ X có một, trình quản lý cửa sổ có thể có một cái khác, v.v. Không có thiết bị tiêu chuẩn.

Ồ, vâng, trên CLI, chương trình màn hình cũng có bảng tạm riêng, cũng như một số ứng dụng khác như Emacsvi .

Trong X, bạn có thể sử dụng xclip .

Bạn có thể kiểm tra chủ đề này để biết các câu trả lời có thể khác: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html


2
Có vẻ như tạo / dev / clip sẽ là một dự án tốt cho một ai đó.
TED

2
Tôi hoàn toàn nhận thức được nhiều clipboards. Làm thế nào điều này làm cho câu hỏi của tôi khó trả lời hơn?
moinudin

Sẽ thật hợp lý nếu các clipboard được chuẩn hóa, có thể sẽ không gây hại nếu bạn có thể sử dụng / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> để truy cập chúng, vấn đề duy nhất là chúng là dành riêng cho người dùng và các thiết bị trên toàn hệ thống. Nhưng nếu bạn tạo trình điều khiển thiết bị kernel che mặt nạ theo UID truy cập, nó sẽ hoạt động như mong đợi.

5

Sao chép và dán vào clipboard trong Windows (Cygwin):

Xem:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

Ngoài ra getclip (nó có thể được sử dụng thay vì Shift+ Ins!) Và putclip (echo oaeuoa | putclip.exe để đưa nó vào clip) tồn tại.


4

Đây là một tập lệnh Python đơn giản thực hiện đúng những gì bạn cần:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

Lưu cái này dưới dạng thực thi ở đâu đó trong đường dẫn của bạn (Tôi đã lưu nó vào /usr/local/bin/clip. Bạn có thể đặt nội dung để lưu vào bảng tạm của mình ...

echo "Hello World" | clip

Và bạn có thể chuyển những gì trong clipboard của mình sang một số chương trình khác ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Chạy nó bằng cách đơn giản sẽ xuất ra những gì trong clipboard.


Điều này hoạt động khi bạn đang ở trên một máy tính, nhưng sẽ không cho phép bạn sao chép mọi thứ giữa các máy tính.
Charles Plager

dường như chỉ có `echo str> tmpfile` và cat tmpfile, không hoạt động clipboard. // giống như câu trả lời @horta.
yurenchen

điều này dường như không đặt biến clipboard, vì vậy tôi không thể dán nội dung trong ứng dụng khác - đó không phải là một bảng tạm thực sự!
jena

4

Tôi đã tìm thấy một tài liệu tham khảo tốt: /unix/69111/

Trong trường hợp của tôi, tôi muốn dán nội dung vào bảng tạm và cũng để xem những gì đã được dán ở đó, vì vậy tôi cũng sử dụng teelệnh với một mô tả tệp:

echo "just a test" | tee >(xclip -i -selection clipboard)

>()là một hình thức thay thế quá trình. bash thay thế từng đường dẫn đến một bộ mô tả tệp được kết nối với đầu vào tiêu chuẩn của chương trình trong ngoặc đơn.

Các teelệnh Forks lệnh của bạn cho phép bạn "ống nội dung của nó" và xem kết quả trên tiêu chuẩn đầu ra "stdout"

bạn cũng có thể tạo các bí danh để nhận và ghi vào bảng tạm, cho phép bạn sử dụng "pbcopy" và "pbpaste" như thể bạn đang ở đâu trên MAC. Trong trường hợp của tôi, khi tôi sử dụng zsh, tôi có tệp này trong tệp bí danh của mình:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

các (( $+command[name] ))kiểm tra trong zsh nếu lệnh "name" được cài đặt trên hệ thống của bạn, thì cả hai bí danh đều được nhóm với {}. những &&là một nhị phân AND, nếu một b sau đó, vì thế nếu bạn có xclip thì bí danh sẽ được thiết lập.

echo "another test" | tee >(pbcopy)

Để có được nội dung clipboard của bạn chỉ cần gõ:

pbpaste | "any-command-you-need-here"

4
  xsel -b

Có công việc cho X Window không, và nó hầu như đã được cài đặt. Một cái nhìn trong trang người đàn ông của xsel là giá trị nỗ lực.


2

Một vài chương trình Windows tôi đã viết cách đây nhiều năm. Chúng cho phép bạn đổ, đẩy, nối và in bảng tạm. Nó hoạt động như thế này:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Nó bao gồm mã nguồn: cmd_clip.zip


2

Có một vài cách. Một số cách đã được đề cập bao gồm (tôi nghĩ) tmux, screen, vim, emacs và shell. Tôi không biết emacs hoặc màn hình, vì vậy tôi sẽ đi qua ba người kia.

Tmux

Mặc dù không phải là lựa chọn X, tmux có chế độ sao chép có thể truy cập qua prefix-[( theo mặc định prefixCtrl+ B). Bộ đệm được sử dụng cho chế độ này là riêng biệt và dành riêng cho tmux, nó mở ra khá nhiều khả năng và làm cho nó linh hoạt hơn các lựa chọn X trong các tình huống phù hợp.

Để thoát chế độ này, nhấn q; để điều hướng, sử dụng vimhoặc emacsràng buộc của bạn (default = vim), do đó, hjklđối với chuyển động, v/V/C-vcho lựa chọn ký tự / dòng / khối, v.v. Khi bạn có lựa chọn của mình, nhấn Enterđể sao chép và thoát chế độ.

Để dán từ bộ đệm này, sử dụng prefix-].

Vỏ

Bất kỳ cài đặt nào X11dường như đi kèm với hai chương trình theo mặc định: xclipxsel(giống như cách nó cũng đi kèm với cả hai startxxinit). Hầu hết các câu trả lời khác đều đề cập đến xclip, và tôi thực sự thích xselsự ngắn gọn của nó, vì vậy tôi sẽ trình bày xsel.

Từ xsel (1x) :

Tùy chọn đầu vào

-a, - xuất hiện

nối đầu vào tiêu chuẩn vào lựa chọn. Ngụ ý -i .

-f, - theo dõi

nối để lựa chọn khi đầu vào tiêu chuẩn phát triển. Ngụ ý -i .

-i, - thông lượng

đọc đầu vào tiêu chuẩn vào lựa chọn.

Tùy chọn đầu ra

-o,

viết lựa chọn vào đầu ra tiêu chuẩn.

Tùy chọn hành động

-c, - rõ ràng

xóa lựa chọn. Ghi đè tất cả các tùy chọn đầu vào.

-d, - hoàn thành

Yêu cầu lựa chọn hiện tại bị xóa. Điều này không chỉ xóa lựa chọn, mà còn yêu cầu chương trình trong đó lựa chọn nằm trong đó nội dung được chọn sẽ bị xóa. Ghi đè tất cả các tùy chọn đầu vào.

Lựa chọn lựa chọn

-p, - đơn giản

hoạt động trên lựa chọn CHÍNH (mặc định).

-s, - thứ hai

hoạt động trên lựa chọn THỨ HAI.

-b, - bảng

hoạt động trên lựa chọn CLIPBOARD.

Và đó là về tất cả những gì bạn cần biết. p(hoặc không có gì) cho PRIMARY, scho SECONDARY, bcho CLIPBOARD, ocho đầu ra.

Ví dụ: giả sử tôi muốn sao chép đầu ra của fooTTY và dán nó vào trang web để báo cáo lỗi. Để làm điều này, sẽ rất lý tưởng khi sao chép vào / từ phiên TTY / X. Vì vậy, câu hỏi trở thành làm thế nào để tôi truy cập vào bảng tạm từ TTY?

Trong ví dụ này, chúng tôi sẽ giả sử phiên X được hiển thị :1.

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Sau đó tôi có thể Ctrl-Vvào mẫu như bình thường.

Bây giờ hãy nói rằng ai đó trên trang web hỗ trợ cho tôi lệnh chạy để khắc phục sự cố. Nó phức tạp và dài.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

Đặt hàng pizza có vẻ như là một cách sử dụng hiệu quả của dòng lệnh.

... Tiếp tục.

Vim

Nếu được biên dịch với +clipboard(Điều này rất quan trọng! Hãy kiểm tra vim --version), Vim sẽ có quyền truy cập vào X PRIMARYvà các CLIPBOARDlựa chọn. Hai lựa chọn có thể truy cập tương ứng từ *và các +thanh ghi, và có thể được ghi và đọc từ lúc rảnh rỗi giống như bất kỳ thanh ghi nào khác. Ví dụ:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

Tuy nhiên, nếu bản sao vim của bạn không hỗ trợ trực tiếp quyền truy cập vào các lựa chọn X, thì đó không phải là ngày tận thế. Bạn chỉ có thể sử dụng các xselkỹ thuật như được mô tả trong phần cuối cùng.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Ràng buộc một vài combo chính và bạn sẽ tốt


Chắc chắn luôn luôn nhớ sử dụng DISPLAY=khi gọi một ứng dụng X từ môi trường không phải X. Các ứng dụng X cần DISPLAYbiến môi trường để tìm ra máy chủ nào (hoặc chỉ có một máy chủ xử lý nhiều phiên?) Họ đang nói chuyện. Ví dụ, hãy thử DISPLAY=:1 firefox(hoặc bất cứ ID hiển thị nào của bạn; :1ví dụ như của tôi ) từ TTY.
Braden hay nhất

Đối với tôi sự lựa chọn trong môi trường của tôi là :%y+trong VIM.
HankCa

2

Từ chuỗi này, có một tùy chọn không yêu cầu cài đặt bất kỳ phần mềm gclip/ xclip/ xselbên thứ ba nào.

Một tập lệnh perl (vì perl thường luôn được cài đặt)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Làm thế nào tôi sẽ sử dụng này? Lưu tập lệnh vào PATH và đường ống vào nó? Tôi đang cố gắng viết trình bao cli dropbox để sao chép các liên kết chia sẻ, vì vậy tôi chỉ cần nó để xử lý văn bản.
jena


2

pbcopy được xây dựng trong OSX:

Sao chép nội dung của .bash_profile:

cat ~/.bash_profile | pbcopy

1

Trong macOS, sử dụng pbpaste.

Ví dụ:

Cập nhật bảng tạm

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

1

Nếu bạn giống tôi và chạy trên máy chủ Linux không có quyền root và không có xclip hoặc GPM nào, bạn có thể khắc phục sự cố này chỉ bằng cách sử dụng tệp tạm thời. Ví dụ:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Tôi không thấy làm thế nào thiếu các yếu tố đặc quyền gốc vào điều này.
Braden hay nhất

3
@BradenBest Thiếu quyền root có nghĩa là tôi không thể cài đặt mọi thứ.
horta

Nhưng bạn sẽ cài đặt cái gì? X? Trên máy chủ? Trừ khi bạn đang lưu trữ một số dịch vụ chuyển tiếp X kỳ lạ, tôi không thể hiểu tại sao bạn muốn làm điều đó.
Braden hay nhất

@BradenBest Không chắc chắn. Bất cứ chương trình hoặc dịch vụ nào cũng sẽ cho phép tôi thực hiện dán sao chép.
horta

1
Chà, nếu bạn đang sử dụng bất kỳ X selections(nào nhất thiết phải được ngụ ý bởi "clipboard" và bất kỳ đề cập nào của xclip / xsel), bạn cần một phiên X hoạt động (và do đó là máy chủ X) để bạn có thể truy cập vào lựa chọn trong địa điểm đầu tiên. Để xem ý tôi là gì, hãy thử chạy DISPLAY="" xseltrên máy cục bộ của bạn. Nó sẽ thoát khi có lỗi, không thể tìm thấy phiên ""và không có tương tác với bất kỳ lựa chọn X nào sẽ được thực hiện. Đó là lý do tại sao ban đầu tôi nói rằng tôi không thấy các đặc quyền gốc ảnh hưởng đến điều này như thế nào: root hoặc không root, bạn không có khả năng tìm thấy lựa chọn X hữu ích trong môi trường máy chủ.
Braden hay nhất


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

Mặc dù> 1 năm sau, tôi chia sẻ một giải pháp hơi khác. Hy vọng điều này hữu ích cho ai đó.

Hôm qua tôi thấy mình với câu hỏi: "Làm thế nào để chia sẻ bảng tạm giữa các phiên người dùng khác nhau?" . Khi chuyển đổi giữa các phiên với ctrlaltF7- ctrlaltF8trên thực tế, bạn không thể dán những gì bạn đã sao chép.

Tôi đã đưa ra giải pháp nhanh & bẩn sau đây , dựa trên một đường ống có tên. Nó chắc chắn là khá trần và thô, nhưng tôi thấy nó có chức năng:

user1@host:~$ mkfifo /tmp/sharedClip

sau đó trong thiết bị đầu cuối gửi

user1@host:~$ cat > /tmp/sharedClip

cuối cùng, trong thiết bị đầu cuối nhận:

user2@host:~$ cat /tmp/sharedClip

Bây giờ, bạn nhập hoặc dán bất cứ thứ gì trong thiết bị đầu cuối đầu tiên và (sau khi nhấn return), nó sẽ xuất hiện ngay lập tức trong thiết bị đầu cuối nhận, từ đó bạn có thể Sao chép / Dán lại bất cứ nơi nào bạn muốn.

Tất nhiên, điều này không hoàn toàn lấy nội dung từ bảng tạm của user1 để làm cho nó có sẵn trong bảng tạm của user2, nhưng nó yêu cầu một cặp lần nhấp Paste & Copy bổ sung.


Không có vẻ quá ngạc nhiên. Hai máy chủ X khác nhau = hai bộ lựa chọn khác nhau. Tuy nhiên, bạn có thể thiết lập một tập lệnh nhận đầu vào / đầu ra thông qua xsel/xclip. Ví dụ, một đầu lắng nghe xem liệu có bất kỳ lựa chọn nào thay đổi hay không, sau đó tự động chuyển nó (thông qua tên gọi FIFO) sang tập lệnh khác, nghe một hoặc nhiều ống dẫn, đưa nó vào lựa chọn X của chính nó. Do đó, sao chép văn bản sẽ tự động dẫn đến cùng một văn bản xuất hiện trong lựa chọn của phiên X khác. Và đừng quên về $DISPLAY.
Braden hay nhất

0

Oneliner ruby ​​đã truyền cảm hứng cho tôi để thử với trăn.

Nói rằng chúng tôi muốn một lệnh thụt lề bất cứ thứ gì trong bảng tạm với 4 khoảng trắng. Hoàn hảo để chia sẻ đoạn mã trên stackoverflow.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

Đó không phải là một lỗi đánh máy. Python cần các dòng mới để thực hiện một vòng lặp for. Chúng tôi muốn thay đổi các dòng trong một lần để tránh xây dựng thêm một mảng trong bộ nhớ.

Nếu bạn không ngại xây dựng mảng bổ sung, hãy thử:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

nhưng thành thật awk là tốt hơn cho điều này hơn python. Tôi đã xác định bí danh này trong ~/.bashrctập tin của mình

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

bây giờ khi tôi chạy indentbất cứ thứ gì trong clipboard của tôi đều bị thụt vào.

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.