Труба в/из буфера обмена в сценарии 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
Ответы
Ответ 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
наслаждаться.
Ответ 23
Существует также xclip-copyfile.
Ответ 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 и убедитесь, что они сертифицированы.