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
apt install xclip
vàcat file | xclip -sel clip
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
apt install xclip
vàcat file | xclip -sel clip
Câu trả lời:
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 v
như 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 X
clipboard
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
alias "cs=xclip -selection clipboard"
và alias "vs=xclip -o -selection clipboard"
để sao chép / dán từ bảng tạm hệ thống dễ dàng hơn
Trên OS X, sử dụng pbcopy
; pbpaste
đi theo hướng ngược lại.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
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ó cb
và nó 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.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_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."
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
$ 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
(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
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 clipboard
như thể hiện trong hai ví dụ này.
$ cat file | clipboard
$ clipboard | less
pbcopy
và pbpaste
trên Linux để nó hoạt động cho cả Linux và OS X.
~/.scripts/clipboard
* Làm cho nó có thể thực thi được chmod +x ~/.scripts/clipboard
cho bash: * thêm export PATH=$PATH:~/.scripts
vào phần cuối của ~/.bashrc
cá: * thêm set PATH ~/.scripts $PATH
và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.
clipboard(){ ... }
và dán nó vào .bashrc
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 -a
lệ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 | cb
nhận được kết quả đầu ra. Và cuối cùng, nó cũng có cb > file.txt
gist.github.com/RichardBronosky/ Kẻ
xclip -i -selection clipboard
thànhxargs echo -n | xclip -i -selection clipboard
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
Tôi đang sử dụng Parcellite và xsel
để sao chép tin nhắn cam kết cuối cùng từ git
trình quản lý clipboard của mình (vì một số lý do xclip
không hoạt động):
$ git log -1 --pretty=%B | xsel -i -b
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.)
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.
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
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
, xsel
hoặ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" để klipper
sử dụng qdbus
. Đường ống đến /dev/null
là không in ký tự dòng mới được trả về qdbus
cho 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ố.
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.
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
Đố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).
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 gdm
và 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