Как скопировать вывод команды непосредственно в буфер обмена?
Как я могу передать вывод команды в буфер обмена и вставить его обратно при использовании терминала? Например:
cat file | clipboard
10 ответов
Я всегда хотел сделать это и нашли хороший и простой способ сделать это. Я записал всю процедуру на случай, если она кому-то еще понадобится.
Сначала установите программу 16 КБ под названием xclip
:
sudo apt-get install xclip
затем вы можете передать вывод в xclip
для копирования в буфер обмена:
cat file | xclip
, чтобы вставить скопированный текст, вы должны использовать:
xclip -o
чтобы упростить жизнь, вы можете настроить псевдоним в своем .файл bashrc как I сделал:
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
Я написал этот маленький скрипт, который берет догадки из команд копирования / вставки.
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
я создал инструмент для Linux / OSX / Cygwin, который похож на некоторые из этих других, но немного уникален. Я называю это cb
и его можно найти в этом GitHub gist.
в этом gist я демонстрирую, как копировать и вставлять через командную строку с помощью Linux, macOS и Cygwin.
Linux
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
macOS
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
Cygwin
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Примечание: я изначально просто намеревался упомянуть об этом в своем комментарии к Боб Enohp ответ. Но затем я понял, что должен добавить README к моей сути. Поскольку редактор gist не предлагает предварительный просмотр уценки, я использовал поле ответа здесь и после копирования / вставки его в мою мысль gist: "я мог бы также отправить ответ."
cb
герметичный тройник в буфер обмена
этот скрипт смоделирован после 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
IND отступы буфера обмена; хорошо для сайтов без переполнения стека { }
вы можете добавить его, выполнив это:
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
без использования внешних инструментов, Если вы подключаетесь к серверу view SSH, это относительно простая команда:
из командной строки Windows 7+:
ssh user@server cat /etc/passwd | clip
это поместить содержимое удаленного файла в локальный буфер обмена.
(команда требует запуска Pageant для ключа, или она запросит у вас пароль.)
Я сделал небольшой инструмент, обеспечивающий аналогичную функциональность, без использования xclip или xsel. stdout
копируется в буфер обмена и может быть вставлена в терминал. См.:
https://sourceforge.net/projects/commandlinecopypaste/
обратите внимание, что этот инструмент не нуждается в X-сессии. Буфер обмена можно просто использовать в терминале и не должен вставляться Ctrl+V или средний щелчок мыши в другие X-windows.
для тех, кто использует bash, установленный в их системе windows (известной как подсистема Windows для Linux (WSL)), попытка xclip даст ошибку:
Error: Can't open display: (null)
вместо этого напомним, что подсистема linux имеет доступ к исполняемым файлам windows. Можно использовать клип.exe нравится
echo hello | clip.exe
что позволяет использовать команду вставить (ctrl-v).