Как скопировать вывод команды непосредственно в буфер обмена?

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

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

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


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

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.


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

xclip - выбор буфера обмена


для тех, кто использует bash, установленный в их системе windows (известной как подсистема Windows для Linux (WSL)), попытка xclip даст ошибку:

Error: Can't open display: (null)

вместо этого напомним, что подсистема linux имеет доступ к исполняемым файлам windows. Можно использовать клип.exe нравится

echo hello | clip.exe

что позволяет использовать команду вставить (ctrl-v).