Работа с буфером обмена в Bash-скрипте: ввод и вывод через пайп
Возможно ли передавать данные в/из буфера обмена в Bash?
Неважно, идет ли речь о передаче через дескриптор устройства или использовании вспомогательного приложения, я не могу найти подходящей информации.
Например, если бы /dev/clip
был устройством, связывающимся с буфером обмена, мы могли бы сделать следующее:
cat /dev/clip # Вывести содержимое буфера обмена
cat foo > /dev/clip # Записать содержимое "foo" в буфер обмена
5 ответ(ов)
Убедитесь, что вы используете alias xclip="xclip -selection c"
, иначе вы не сможете вставлять с помощью +.
Пример:
После выполнения команды echo -n test | xclip
, символ + будет вставлять test
.
xsel на Debian/Ubuntu/Mint
# Добавить содержимое в буфер обмена:
cat 'имя_файла_с_содержимым' | xsel -ab
# Или напечатать 'счастливое лицо :)' и ...
echo 'счастливое лицо :) и содержание' | xsel -ib
# Показать содержимое буфера обмена
xsel -ob
# Получить больше информации:
man xsel
Установка
sudo apt-get install xsel
Не забудьте заменить 'имя_файла_с_содержимым'
на имя вашего файла. Если у вас возникнут вопросы или проблемы, не стесняйтесь задавать их!
Чтобы установить утилиту 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)
Надеюсь, это поможет!
Вот готовый к использованию 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
Если у вас возникнут вопросы по адаптации скрипта или добавлению новых функций, не стесняйтесь задавать их!
Для Mac только:
echo "Hello World" | pbcopy
pbpaste
Эти команды находятся по адресам /usr/bin/pbcopy
и /usr/bin/pbpaste
.
Если вам нужно скопировать текст "Hello World" в буфер обмена, используйте команду pbcopy
. Затем, чтобы вставить этот текст из буфера обмена в терминал, просто выполните pbpaste
. Таким образом, вы можете легко копировать и вставлять текст в вашем терминале на Mac.
Как изменить цвет вывода echo в Linux
Как перенаправить вывод в файл и на экран (stdout)
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Как работает "cat << EOF" в bash?
Как использовать 'grep' для непрерывного потока?