Как я могу передать вывод команды в свой буфер обмена и вставить ее обратно при использовании терминала? Например:
cat file | clipboard
Я всегда хотел сделать это и нашел хороший и простой способ сделать это. Я записал полную процедуру на случай, если кому-то это понадобится.
Сначала установите программу 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
В OS X используйте pbcopy
; pbpaste
идет в противоположном направлении.
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
Я написал эту небольшую script, которая вынимает угадывание из команд copy/paste.
Linux-версия script полагается на xclip, уже установленную в вашей системе. script называется буфером обмена.
#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp output into clipboard
# clipboard | someapp # Pipe clipboard 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 для script основана на pbcopy и pbpaste, которые предварительно установлены на всех компьютерах Mac.
#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard # Pipe someapp output into clipboard
# clipboard | someapp # Pipe clipboard 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
Использование script очень просто, так как вы просто входите или выходите из clipboard
, как показано в этих двух примерах.
$ cat file | clipboard
$ clipboard | less
pbcopy
и pbpaste
в Linux, поэтому он работает как для Linux, так и для OS X.
~/.scripts/clipboard
* Сделайте его исполняемым chmod +x ~/.scripts/clipboard
для bash: * добавьте export PATH=$PATH:~/.scripts
до конца из ~/.bashrc
для рыбы: * добавить set PATH ~/.scripts $PATH
в ~/.config/fish/fish.config
Если какие-либо файлы или папки еще не существуют, просто создайте их.
Я создал инструмент для 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
}
Примечание. Я изначально просто хотел упомянуть об этом в своем комментарии к Bob Enohp answer. Но потом я понял, что должен добавить README к моей сути. Поскольку редактор gist не предлагает предварительный просмотр Markdown, я использовал окно ответа здесь и после копирования/вставки его в мою мысль: "Я мог бы также отправить ответ".
Этот script моделируется после 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
Добавьте это в свой ~/.bashrc
:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Теперь клип p пасты и c клип-копии — но вы также можете делать более интересные вещи:
clipp | sed 's/^/ /' | cclip
& uarr; отступы вашего буфера обмена; хорошо для сайтов без { } button
Вы можете добавить его, выполнив это:
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 для ключа, или он попросит вас ввести пароль.)
В Linux с установленной xclip:
xclip -selection буфер обмена < файл
xclip -sel c < sourcefile
также будет работать
Я сделал небольшой инструмент, обеспечивающий аналогичную функциональность, без использования xclip или xsel. stdout
копируется в буфер обмена и может быть снова вставлен в терминал. См.:
https://sourceforge.net/projects/commandlinecopypaste/
Обратите внимание, что этому инструменту не нужен X-сеанс. Буфер обмена можно использовать только в терминале, и его нельзя вставлять Ctrl+V или щелкнуть мышью в другие X-окна.
Я пришел из урезанного фона KDE и не имею доступа к xclip
, xsel
или другим 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
аргумент. Этот аргумент передается исполняемому файлу bash, который отправляет запрос "copy to clipboard" в klipper
с помощью qdbus
. Канал в /dev/null
должен избегать символа новой строки, возвращаемого qdbus
.
Пример использования:
ls | clipboard
Это копирует содержимое текущей папки в буфер обмена.
Примечание: работает только как труба. Используйте исполняемый файл bash напрямую, если вам нужно скопировать аргумент.
Основываясь на предыдущих постах, я получил следующее легкое решение для псевдонимов, которое можно добавить в .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
Для тех, кто использует bash, установленный в их системе Windows (известной как Windows Subsystem for Linux (WSL)), попытка xclip выдаст ошибку:
Error: Can't open display: (null)
Напомним, что подсистема Linux имеет доступ к исполняемым файлам Windows. Можно использовать clip.exe вроде
echo hello | clip.exe
который позволяет использовать команду вставки (ctrl-v).