Труба в / из буфера обмена в скрипте 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 ]

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

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

240 голосов
/ 17 ноября 2010

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

echo test | xclip    

Ctrl + v === test

154 голосов
/ 13 декабря 2014

Установить

# 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
122 голосов
/ 05 марта 2011

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

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

cat ~/.bashrc | pbcopy

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

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

Попробуйте

xclip

xclip - command line interface to X selections (clipboard) 

человек

22 голосов
/ 18 августа 2015

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
14 голосов
/ 11 декабря 2017

Ух ты, я не могу поверить, сколько существует ответов на этот вопрос. Я не могу сказать, что я пробовал их все, но я пробовал лучшие 3 или 4, и ни один из них не работает для меня. Что сработало для меня, так это ответ, находящийся в одном из комментариев, написанных пользователем по имени Дуг. Так как я нашел это очень полезным, я решил повторить в ответ.

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

Copy

Thing_you_want_to_copy|xclip -selection c

Paste

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)
11 голосов
/ 04 октября 2013

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

#!/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
11 голосов
/ 28 марта 2018

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

cat file | clip.exe

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

9 голосов
/ 31 мая 2011

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

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