Подтвердить что ты не робот

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

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

cat file | clipboard
4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Я написал эту небольшую 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

Ответ 5

Добавьте это в свой ~/.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

Ответ 6

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

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

Ответ 7

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

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

ssh [email protected] cat /etc/passwd | clip

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

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

Для Mac это пример способа скопировать (в буфер обмена) вставку (из буфера обмена) с помощью командной строки

Скопируйте результат команды pwd в буфер обмена как

$ pwd | pbcopy

Используйте содержимое в буфере обмена как

$ cd $(pbpaste)

Ответ 12

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

Error: Can't open display: (null)

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

echo hello | clip.exe

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

Ответ 13

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

Реквизиты: 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 передает stdin в один аргумент. Этот аргумент передается исполняемому файлу bash, который отправляет запрос "copy to clipboard" в klipper с помощью qdbus. Канал к /dev/null не должен выводить символ новой строки, возвращенный qdbus на консоль.

Пример использования:

ls | clipboard

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

Примечание: работает только как pipe. Используйте исполняемый файл bash напрямую, если вам нужно скопировать аргумент.

Ответ 14

Просто чтобы охватить крайний случай :) и потому, что заголовок вопроса спрашивает (по крайней мере, сейчас), как скопировать вывод команды непосредственно в буфер обмена.

Часто я считаю полезным скопировать вывод команды после того, как она уже была выполнена, и я не хочу или не могу выполнить команду снова.

Для этого сценария мы можем использовать либо gdm, либо аналогичную утилиту мыши и выбирать с помощью мыши. apt-get install gdm, а затем либо правой кнопкой мыши, либо комбинациями Cntrl + Shift + c и Cntrl + Shift + v для копирования и вставки в терминал

Или, который является предпочтительным для меня способом (так как мышь не может правильно выбрать внутри одной панели, когда у вас есть несколько панелей рядом и вам нужно выбрать более одной строки), используя tmux, мы можем скопировать в буфер tmux, используя стандартный [, пробел, переместить, чтобы выбрать, введите или вы можете выбрать блок кода. Также это особенно полезно, когда вы находитесь внутри одной из полос мультиплексора cli, например tmux, и вам нужно выбрать группу текста, но не номера строк (моя установка vim отображает номера строк)

После этого вы можете использовать команду:

tmux save-buffer - | xclip -i

Конечно, вы можете присвоить ему псевдоним или привязать его непосредственно в конфигурационном файле tmux

Это просто для того, чтобы дать вам концептуальный ответ, чтобы охватить этот крайний случай, когда невозможно выполнить команду снова. Если вам нужны более конкретные примеры кода, дайте мне знать

ура