Труба в/из буфера обмена в сценарии Bash - программирование
Подтвердить что ты не робот

Труба в/из буфера обмена в сценарии Bash

Можно ли подключиться к/из буфера обмена в Bash?

Независимо от того, является ли это конвейером в/из дескриптора устройства или с помощью вспомогательного приложения, я ничего не могу найти.

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

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

Ответ 1

Есть множество буферов обмена, с которыми вы можете иметь дело. Я предполагаю, что вы, вероятно, пользователь Linux, который хочет поместить материал в основной буфер обмена Windows. Обычно в буфере обмена, с которым вы хотите общаться, есть утилита, с помощью которой вы можете общаться с ним.

В случае X, есть xclip (и другие). xclip -selection c отправит данные в буфер обмена, который работает с Ctrl + C, Ctrl + V в большинстве приложений.

Если вы работаете в Mac OS X, есть pbcopy.

Если вы находитесь в режиме терминала Linux (без X), посмотрите на gpm или экран, в котором есть буфер обмена. Попробуйте команду screen readreg.

Под Windows 10+ или cygwin используйте /dev/clipboard или clip.

Ответ 2

Убедитесь, что вы используете псевдоним xclip="xclip -selection c" иначе вы не можете просто использовать Ctrl + v, чтобы вставить его обратно в другое место.

echo test | xclip    

Ctrl + v === test

Ответ 3

Установка

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Если у вас нет доступа к apt-get и pacman, а не dnf, источники доступны на sourceforge.

Настройка

Bash

В ~/.bash_aliases добавьте:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

Не забудьте загрузить новую конфигурацию с помощью . ~/.bash_aliases или перезапустив свой профиль.

Рыба

В ~/.config/fish/config.fish добавьте:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

Не забудьте перезагрузить экземпляр вашей рыбы, перезапустив терминал для внесения изменений.

Использование

Теперь вы можете использовать setclip и getclip, например:

$ echo foo | setclip
$ getclip
foo

Ответ 4

В macOS используйте встроенные команды pbcopy и pbpaste.

Например, если вы запустите

cat ~/.bashrc | pbcopy

содержимое файла ~/.bashrc будет доступно для вставки с помощью ярлыка Cmd + v.

Ответ 5

Try

xclip

xclip - command line interface to X selections (clipboard) 

man

Ответ 6

xsel на Debian/Ubuntu/Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Установить

sudo apt-get install xsel

Ответ 7

Ничего себе, я не могу поверить, сколько ответов есть на этот вопрос. Я не могу сказать, что я пробовал их все, но я пробовал 3 или 4 лучших, и никто из них не работает для меня. То, что работало для меня, было ответом, расположенным в одном из комментариев, написанном пользователем под названием doug. Поскольку я нашел это настолько полезным, я решил повторить в ответе.

Установите утилиту xcopy и, когда вы находитесь в терминале, введите:

копия

Thing_you_want_to_copy|xclip -selection c

Вставить

myvariable=$(xclip -selection clipboard -o)

Я заметил много ответов, рекомендованных pbpaste и pbcopy. Если вы используете эти утилиты, но по какой-либо причине они недоступны в вашем репо, вы всегда можете сделать псевдоним для команд xcopy и называть их pbpaste и pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Итак, это будет выглядеть так:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Ответ 8

Вот готовый к использованию bash script для чтения буфера обмена, который работает на нескольких платформах. Пожалуйста, отредактируйте script здесь, если вы добавите функциональность (например, больше платформ).

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp

Ответ 9

В подсистеме Windows для Linux вы можете скопировать в буфер обмена с помощью clip.exe.

cat file | clip.exe

Имейте в виду использовать | pipe. А не > команда, так как это не сработает.

Ответ 10

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

Ответ 11

В Windows (с Cygwin) попробуйте cat /dev/clipboard или echo "foo" > /dev/clipboard, как указано в этой статье.

Ответ 12

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

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

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

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

Ответ 13

Только для Mac:

echo "Hello World" | pbcopy
pbpaste

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

Ответ 14

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

см

$clip.exe -?

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

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

Ответ 15

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

#!/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 |
                ||     ||

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

Ответ 16

  xsel -b

Выполняется ли задание для x11, оно в основном уже установлено. Взгляд в man-странице xsel стоит усилий.

Ответ 17

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

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

Он включает исходный код: cmd_clip.zip

Ответ 18

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

Tmux

Пока нет выбора X, tmux имеет режим копирования, доступный через prefix-[ (prefix is 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

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

-s, -secondary

работают с выбором SECONDARY.

-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`

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

Ответ 19

В этом потоке есть опция, которая не требует установки стороннего программного обеспечения gclip/xclip/xsel.

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

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Ответ 20

Я нашел хорошую ссылку: https://unix.stackexchange.com/questions/69111/

В моем случае я хотел бы вставить содержимое в буфер обмена, а также посмотреть, что там вставлено, поэтому я также использовал команду tee с дескриптором файла:

echo "just a test" | tee >(xclip -i -selection clipboard)

>() является формой замены процесса. bash заменяет каждый путь к дескриптору файла, который связан со стандартным вводом программы в круглых скобках.

Команда tee разветвляет вашу команду, позволяя вам "передать ее содержимое" и увидеть результат в стандартном выводе "stdout"

Вы также можете создавать псевдонимы для получения и записи в буфер обмена, что позволяет вам использовать "pbcopy" и "pbpaste", как если бы вы были на MAC. В моем случае, поскольку я использую zsh, у меня есть это в моем файле псевдонимов:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

(( $+command[name] )) в zsh проверяет, установлена ли в вашей системе команда "name", тогда оба псевдонима сгруппированы с {}. && - это двоичное И, если a, то b, следовательно, если у вас есть xclip, псевдонимы будут установлены.

echo "another test" | tee >(pbcopy)

Чтобы получить содержимое буфера обмена, просто введите:

pbpaste | "any-command-you-need-here"

Ответ 21

Если вы похожи на меня и запускаете на Linux-сервере без привилегий root, и нет xclip или gpm, вы можете решить эту проблему, просто используя временный файл. Например:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world

Ответ 22

в macOS использовать pbpaste

например:

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

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

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

Ответ 24

Хотя > 1 год спустя, я разделяю немного другое решение. Надеюсь, это полезно для кого-то.

Вчера я столкнулся с вопросом: "Как разделить буфер обмена между различными сеансами пользователя?". При переключении между сеансами с ctrl alt F7 - ctrl alt F8 на самом деле вы не можете вставить скопированные файлы.

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

[email protected]:~$ mkfifo /tmp/sharedClip

то в отправляющем терминале

[email protected]:~$ cat > /tmp/sharedClip

last, в приемном терминале:

[email protected]:~$ cat /tmp/sharedClip

Теперь вы вводите или вставляете что-либо в первый терминал, и (после нажатия return) он будет немедленно отображаться в принимающем терминале, откуда вы можете снова и снова копировать/вставлять в любом месте.

Конечно, это не просто строго берет контент из буфера обмена user1, чтобы сделать его доступным в буфере обмена user2, а требует дополнительной пары кликов "Вставить" и "Копировать".

Ответ 25

Один из наиболее эффективных и эффективных способов подготовки экзаменов CA Technologies CAT-540 - это ответы на вопросы отвалов CAT-540 и тестовое программное обеспечение CAT-540. VceTests известны тем, что предоставили лучшие сертификационные экзамены CA Technologies для студентов CA Technologies. Подготовьте экзамен CAT-540 на наших тестовых тестах VTS VAT и убедитесь, что они сертифицированы.