Как я могу скопировать вывод команды прямо в буфер обмена? - PullRequest
436 голосов
/ 27 февраля 2011

Как я могу передать вывод команды в буфер обмена и вставить его обратно при использовании терминала? Например:

cat file | clipboard

Ответы [ 13 ]

513 голосов
/ 27 февраля 2011

Я всегда хотел сделать это и нашел хороший и простой способ сделать это.Я записал полную процедуру на тот случай, если кому-то еще это понадобится.

Сначала установите программу 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
149 голосов
/ 27 февраля 2011

В OS X используйте pbcopy;pbpaste идет в противоположном направлении.

47 голосов
/ 25 января 2017

Я создал инструмент для Linux / OSX / Cygwin, который похож на некоторые из этих других, но немного уникален.Я называю это cb и , его можно найти в этом github 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
}

Примечание. Первоначально я просто хотел упомянуть об этом в своем комментарии к Ответ Боба Энопа .Но потом я понял, что должен добавить README к своей сути.Поскольку редактор gist не предлагает предпросмотр Markdown, я использовал здесь поле для ответа и после того, как скопировал / вставил его в свою мысль: «Я мог бы также отправить ответ».

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
42 голосов
/ 19 октября 2013

Я написал этот небольшой скрипт, который берет на себя работу по угадыванию команд копирования / вставки.

Версия скрипта для 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
20 голосов
/ 26 февраля 2015

Добавьте это к вашему ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Теперь клип p вставок и c клип копий & mdash; но вы также можете делать более интересные вещи:

clipp | sed 's/^/    /' | cclip

& uarr; отступ в вашем буфере обмена; хорошо для сайтов без переполнения стека {} кнопка

Вы можете добавить его, запустив это:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
7 голосов
/ 14 апреля 2016

Я использую Parcellite и xsel для копирования последнего коммита с git в мой менеджер буфера обмена (по какой-то причине xclip не работает):

$ git log -1 --pretty=%B | xsel -i -b
5 голосов
/ 05 декабря 2014

Без использования внешних инструментов, если вы подключаетесь к серверу SSH, это довольно простая команда:

Из командной строки Windows 7+:

ssh user@server cat /etc/passwd | clip

Это будетпоместите содержимое удаленного файла в локальный буфер обмена.

(Команда требует запуска Pageant для ключа или запросит пароль.)

3 голосов
/ 28 января 2016

В Linux с установленным xclip:

xclip -selection clipboard <файл </p>

3 голосов
/ 12 ноября 2013

Я сделал небольшой инструмент, обеспечивающий аналогичную функциональность, без использования xclip или xsel.stdout копируется в буфер обмена и может быть снова вставлен в терминал.См .:

https://sourceforge.net/projects/commandlinecopypaste/

Обратите внимание, что этот инструмент не требует X-сеанса.Буфер обмена можно просто использовать в терминале, и его нельзя вставлять нажатием Ctrl + V или щелчком средней кнопки мыши в другие окна X.

1 голос
/ 30 декабря 2018

Основываясь на предыдущих постах, я получил следующее легкое решение для псевдонимов, которое можно добавить к .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
...