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


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

cat file | clipboard
10 348

10 ответов:

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

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

если вы хотите вставить где-то еще, кроме a 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
}

программа

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Примечание: я изначально просто намеревался упомянуть об этом в своем комментарии к ответ Боба Еноха. Но потом я понял, что должен добавить README к моей сути. Поскольку редактор gist не предлагает предварительный просмотр Markdown, я использовал поле ответа здесь и после копирования/вставки его в мою мысль 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-окна.

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

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

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

Error: Can't open display: (null)

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

echo hello | clip.exe

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