Труба в / из буфера обмена в скрипте Bash - PullRequest
812 голосов
/ 15 апреля 2009

Можно ли передавать в буфер обмена в Bash?

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

Например, если /dev/clip было устройством, связывающим с буфером обмена, мы могли бы сделать:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

Ответы [ 23 ]

9 голосов
/ 15 апреля 2009

В Linux есть разные буферы обмена; у X-сервера он есть, у оконного менеджера может быть другой и т. д. Стандартного устройства нет.

Да, в CLI экранная программа также имеет свой собственный буфер обмена, как и некоторые другие приложения, такие как Emacs и vi .

В X вы можете использовать xclip .

Вы можете проверить эту тему для других возможных ответов: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

8 голосов
/ 22 августа 2014

Только для Mac:

echo "Hello World" | pbcopy
pbpaste

Они расположены /usr/bin/pbcopy и /usr/bin/pbpaste.

8 голосов
/ 05 апреля 2018

2018 ответ

Использовать clipboard-cli . Он работает с macOS, Windows, Linux, OpenBSD, FreeBSD и Android без особых проблем.

Установите его с помощью:

npm install -g clipboard-cli

Тогда вы можете сделать

echo foo | clipboard

Если вы хотите, вы можете использовать псевдоним cb, добавив следующее в .bashrc, .bash_profile или .zshrc:

alias cb=clipboard

5 голосов
/ 21 июня 2013

Копирование и вставка в буфер обмена в Windows (Cygwin):

см

$ clip.exe -?

CLIP Описание: Перенаправляет вывод инструментов командной строки в буфер обмена Windows. Этот текстовый вывод затем может быть вставлен в другие программы. Список параметров: /? Отображает это справочное сообщение. Примеры: DIR | CLIP Помещает копию текущего каталога листинг в буфер обмена Windows. CLIP

Также существует getclip (можно использовать вместо shift + ins!), Putclip (echo oaeuoa | putclip.exe, чтобы вставить его в клип)

4 голосов
/ 12 июня 2015
  xsel -b

Выполняет работу для x11, она в основном уже установлена. Заглянуть в справочную страницу по xsel стоит усилий.

3 голосов
/ 06 мая 2015

Это простой скрипт на Python, который делает именно то, что вам нужно:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

Сохраните это как исполняемый файл где-то на вашем пути (я сохранил его в /usr/local/bin/clip. Вы можете передать материал, который будет сохранен в вашем буфере обмена ...

echo "Hello World" | clip

И вы можете передать то, что находится в вашем буфере обмена, в другую программу ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Запуск его сам по себе просто выведет то, что находится в буфере обмена.

2 голосов
/ 08 июня 2014

Несколько программ для Windows, которые я написал несколько лет назад. Они позволяют вам выгружать, толкать, добавлять и распечатывать буфер обмена. Это работает так:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Содержит исходный код: cmd_clip.zip

2 голосов
/ 23 сентября 2017

Из этой темы есть опция, которая не требует установки какого-либо gclip / xclip / xsel стороннего программного обеспечения.

скрипт perl (поскольку perl обычно всегда устанавливается)

use Win32::Clipboard;
print Win32::Clipboard::GetText();
2 голосов
/ 11 мая 2017

Есть несколько способов. Некоторые из упомянутых способов включают (я думаю) tmux, screen, vim, emacs и оболочку. Я не знаю emacs или screen, поэтому я перейду к остальным трем.

Tmux

Хотя это не выбор X, tmux имеет режим копирования, доступный через prefix-[ (prefix - это Ctrl + B по умолчанию). Буфер, используемый для этого режима, является отдельным и эксклюзивным для tmux, что открывает немало возможностей и делает его более универсальным, чем выбор X в нужных ситуациях.

Чтобы выйти из этого режима, нажмите q ; для навигации используйте привязку vim или emacs (по умолчанию = vim), поэтому hjkl для движения, v/V/C-v для выбора персонажа / линии / блока и т. д. Когда у вас есть выбор, нажмите Enter для копирования и выхода из режима.

Чтобы вставить из этого буфера, используйте prefix-].

Shell

Любая установка X11, по-видимому, идет с двумя программами по умолчанию: xclip и xsel (вроде как и с startx и xinit). В большинстве других ответов упоминается xclip, и мне очень нравится xsel за его краткость, поэтому я собираюсь охватить xsel.

С xsel (1x) :

Параметры ввода

-a, --append

добавить стандартный выбор к выбору. Подразумевает -i .

-f, --follow

добавить к выбору по мере увеличения стандартного ввода. Подразумевает -i .

-i, --input

читать стандартный ввод в выборку.

Варианты вывода

-o, --output

записать выборку в стандартный вывод.

Опции действий

-c, --clear

очистить выбор. Переопределяет все параметры ввода.

-d, --delete

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

Варианты выбора

-p, --primary

работает на первичном выборе (по умолчанию).

-s, - среднее

работают на ВТОРИЧНОМ выборе.

-b, --clipboard

работает с выбором CLIPBOARD.

И это все, что вам нужно знать. p (или ничего) для PRIMARY, s для SECONDARY, b для CLIPBOARD, o для вывода.

Пример: скажем, я хочу скопировать вывод foo из TTY и вставить его на веб-страницу для сообщения об ошибке. Для этого было бы идеально скопировать в / из сеанса TTY / X. Поэтому возникает вопрос как получить доступ к буферу обмена из TTY?

В этом примере мы предположим, что сеанс X отображается :1.

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Тогда я могу Ctrl-V принять форму, как обычно.

Теперь скажите, что кто-то на сайте поддержки дает мне команду на запуск, чтобы решить проблему. Это сложно и долго.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

Заказ пиццы похоже на продуктивное использование командной строки.

... двигаясь дальше.

Vim

Если скомпилировано с +clipboard (это важно! Проверьте vim --version), Vim должен иметь доступ к выборкам X PRIMARY и CLIPBOARD. Эти два выбора доступны из регистров * и +, соответственно, и могут быть записаны и считаны на досуге так же, как и любой другой регистр. Например:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

Если ваша копия vim напрямую не поддерживает доступ к выборкам X, это еще не конец света. Вы можете просто использовать технику xsel, как описано в последнем разделе.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Свяжите пару комбинаций клавиш, и все будет хорошо.

1 голос
/ 02 ноября 2017

в macOS pbpaste

например:

обновить буфер обмена

pbpaste | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

наслаждаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...