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

358

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

cat file | clipboard
Теги:
terminal
clipboard

12 ответов

428
Лучший ответ

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

Сначала установите программу 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
  • 114
    «cat file | xclip» только копирует содержимое в буфер обмена «X», если вы хотите вставить что-то еще, кроме приложения «X», попробуйте следующее: «cat file | xclip -selection clipboard»
  • 5
    Ваш выбор ручки уместен!
Показать ещё 10 комментариев
139

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

  • 8
    Yups! Точно так же для ex: pbcopy < .ssh/id_rsa.pub
  • 0
    не работает для вывода команды, хотя - например, pbcopy < git merge-base master some-branch
Показать ещё 4 комментария
38

Я написал эту небольшую 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
  • 3
    Я использую имена pbcopy и pbpaste в Linux, поэтому он работает как для Linux, так и для OS X.
  • 0
    Чтобы скрипт работал глобально в Ubuntu: * Сохраните его в ~/.scripts/clipboard * Сделайте его исполняемым chmod +x ~/.scripts/clipboard для bash: * добавьте export PATH=$PATH:~/.scripts до конца из ~/.bashrc для рыбы: * добавить set PATH ~/.scripts $PATH в ~/.config/fish/fish.config Если какие-либо файлы или папки еще не существуют, просто создайте их.
Показать ещё 4 комментария
35

Я создал инструмент для 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
}

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

cb

Тепловизионный тройник в буфер обмена

Этот 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

Chaining

$ 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
  • 3
    Я получил понижение сегодня без комментариев. Потрясающие! #community
19

Добавьте это в свой ~/.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
  • 0
    Приведи пример использования пожалуйста
7

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

$ git log -1 --pretty=%B | xsel -i -b
5

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

В командной строке Windows 7+:

ssh user@server cat /etc/passwd | clip

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

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

  • 1
    @AfshinMoazami, название и сам вопрос являются общими, только подсказки для системы Unix, и мой ответ покрывает случай, когда вы пытаетесь получить дату С сервера Unix НА компьютер с Windows, что может пригодиться будущим читателям.
  • 1
    Проголосовал, потому что да, полезно для администраторов Windows, у которых есть только Powershell, чтобы играть с ним локально (хотя теперь, когда LSW действительно работает, я могу перейти в bash прямо из Powershell и делать оттуда * * nixy).
Показать ещё 1 комментарий
3

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

xclip -selection буфер обмена < файл

  • 2
    xclip -sel c < sourcefile также будет работать
3

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

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

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

0

Я пришел из урезанного фона 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 напрямую, если вам нужно скопировать аргумент.

0

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

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

Error: Can't open display: (null)

Напомним, что подсистема Linux имеет доступ к исполняемым файлам Windows. Можно использовать clip.exe вроде

echo hello | clip.exe

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

  • 0
    Обратите внимание, что если в Windows установлен xserver (например, vcxsvr или xming), дисплей работает, а xclipboard запущен, то вы действительно можете без проблем использовать xclip.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню