Как я могу направить вывод команды в буфер обмена и вставить его обратно при использовании терминала? Например:
cat file | clipboard
apt install xclip
иcat file | xclip -sel clip
Как я могу направить вывод команды в буфер обмена и вставить его обратно при использовании терминала? Например:
cat file | clipboard
apt install xclip
иcat file | xclip -sel clip
Ответы:
Я всегда хотел сделать это и нашел хороший и простой способ сделать это. Я записал полную процедуру на случай, если кому-то еще это понадобится.
Сначала установите программу 16 КБ, которая называется 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 gist .
В этой статье я продемонстрирую, как выполнять копирование и вставку через командную строку, используя 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
}
Примечание: изначально я просто хотел упомянуть об этом в своем комментарии к ответу Боба Энохпа . Но потом я понял, что должен добавить README к своей сути. Так как редактор gist не предлагает предварительный просмотр Markdown, я использовал здесь поле для ответа и после того, как скопировал / вставил его в свою мысль: «Я мог бы также отправить ответ».
Этот скрипт смоделирован после 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, которые предустановлены на всех компьютерах 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
Использовать сценарий очень просто, поскольку вы просто вводите или отключаете, clipboard
как показано в этих двух примерах.
$ cat file | clipboard
$ clipboard | less
pbcopy
и pbpaste
в Linux, поэтому он работает как для Linux, так и для OS X.
~/.scripts/clipboard
* Сделайте его исполняемым chmod +x ~/.scripts/clipboard
для bash: * добавьте 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'
Теперь клип р паст и с клипами копия - но вы также можете сделать любитель вещи:
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 для ключа, или она попросит вас ввести пароль.)
Я сделал небольшой инструмент, обеспечивающий аналогичную функциональность, без использования xclip или xsel. stdout
копируется в буфер обмена и может быть снова вставлен в терминал. Видеть:
https://sourceforge.net/projects/commandlinecopypaste/
Обратите внимание, что этот инструмент не требует X-сессии. Буфер обмена можно просто использовать в терминале, и его не нужно вставлять Ctrl+Vили щелкать средним щелчком мыши в других окнах X.
Основываясь на предыдущих постах, я получил следующее легкое решение для псевдонимов, которое можно добавить к .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, чтобы усугубить ситуацию.
Реквизиты: qdbus
klipper
xargs
bash
Создайте исполняемый файл 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 в один аргумент. Этот аргумент передается исполняемому файлу bash, который отправляет запрос «copy to clipboard» на klipper
использование qdbus
. Канал /dev/null
заключается в том, чтобы не печатать символ новой строки, возвращаемый qdbus
консолью.
Пример использования:
ls | clipboard
Это копирует содержимое текущей папки в буфер обмена.
Примечание: работает только как труба. Используйте исполняемый файл bash напрямую, если вам нужно скопировать аргумент.
Я обычно запускаю эту команду, когда мне нужно скопировать мой 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 Subsystem for Linux (WSL)), попытка xclip выдаст ошибку:
Error: Can't open display: (null)
Напомним, что подсистема Linux имеет доступ к исполняемым файлам Windows. Можно использовать clip.exe как
echo hello | clip.exe
который позволяет использовать команду вставки (ctrl-v).
Просто чтобы охватить крайний случай :) и потому, что заголовок вопроса спрашивает (по крайней мере, сейчас), как скопировать вывод команды непосредственно в буфер обмена.
Часто я считаю полезным скопировать вывод команды после того, как она уже была выполнена, и я не хочу или не могу выполнить команду снова.
Для этого сценария мы можем использовать либо gdm, либо аналогичную утилиту мыши и выбирать с помощью мыши. apt-get install gdm
и затем либо правый клик, либо комбинации Cntrl + Shift + c и Cntrl + Shift + v для копирования и вставки в терминал
Или, который является предпочтительным для меня способом (так как мышь не может правильно выбрать внутри одной панели, когда у вас есть несколько панелей рядом и вам нужно выбрать более одной строки), используя tmux, мы можем скопировать в буфер tmux, используя стандартный [, пробел, переместить, чтобы выбрать, введите или вы можете выбрать блок кода. Также это особенно полезно, когда вы находитесь внутри одной из полос мультиплексора cli, например tmux, и вам нужно выбрать группу текста, но не номера строк (моя установка vim отображает номера строк)
После этого вы можете использовать команду:
tmux save-buffer - | xclip -i
Конечно, вы можете присвоить ему псевдоним или привязать его напрямую в конфигурационном файле tmux.
Это просто для того, чтобы дать вам концептуальный ответ, чтобы охватить этот крайний случай, когда невозможно выполнить команду снова. Если вам нужны более конкретные примеры кода, дайте мне знать
ура