13

Работа с буфером обмена в Bash-скрипте: ввод и вывод через пайп

11

Возможно ли передавать данные в/из буфера обмена в Bash?

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

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

cat /dev/clip        # Вывести содержимое буфера обмена
cat foo > /dev/clip  # Записать содержимое "foo" в буфер обмена

5 ответ(ов)

3

Убедитесь, что вы используете alias xclip="xclip -selection c", иначе вы не сможете вставлять с помощью +.

Пример: После выполнения команды echo -n test | xclip, символ + будет вставлять test.

0

xsel на Debian/Ubuntu/Mint

# Добавить содержимое в буфер обмена:
cat 'имя_файла_с_содержимым' | xsel -ab

# Или напечатать 'счастливое лицо :)' и ...
echo 'счастливое лицо :) и содержание' | xsel -ib

# Показать содержимое буфера обмена
xsel -ob

# Получить больше информации:
man xsel

Установка

sudo apt-get install xsel

Не забудьте заменить 'имя_файла_с_содержимым' на имя вашего файла. Если у вас возникнут вопросы или проблемы, не стесняйтесь задавать их!

0

Чтобы установить утилиту 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)

Надеюсь, это поможет!

0

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

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

#!/bin/bash
# WF 2013-10-04
#
# Многофункциональный доступ к буферу обмена
#
# Поддерживает:
#   Mac OS X
#   Git shell / Cygwin (Windows)
#   Linux (например, Ubuntu)

#
# Функция для отображения ошибки
#
error() {
  echo "ошибка: $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*)
          # Работает только для X буфера обмена - возможно, стоит проверить, запущен ли X
          xclip -o;;
        *)
          error "неподдерживаемая ОС $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# Закомментируйте для отладки
rm $tmp

Если у вас возникнут вопросы по адаптации скрипта или добавлению новых функций, не стесняйтесь задавать их!

0

Для Mac только:

echo "Hello World" | pbcopy
pbpaste

Эти команды находятся по адресам /usr/bin/pbcopy и /usr/bin/pbpaste.

Если вам нужно скопировать текст "Hello World" в буфер обмена, используйте команду pbcopy. Затем, чтобы вставить этот текст из буфера обмена в терминал, просто выполните pbpaste. Таким образом, вы можете легко копировать и вставлять текст в вашем терминале на Mac.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь