Возможно ли пускать в / из буфера обмена в Bash?
Я не могу найти что-либо по трубопроводу на / из дескриптора устройства или с помощью вспомогательного приложения.
Например, если /dev/clip
бы устройство связывалось с буфером обмена, мы могли бы сделать:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
:%y+
в vim, который является vim-говорить для "yank (скопировать) все строки в регистр '+' (PRIMARY
буфер обмена X )". Вы можете заменить%
диапазон, если хотите быть конкретным. Но есть три предостережения: 1. Теперь вы должны сохранить любой текст в файл, прежде чем сможете скопировать его. Это в отличие отxclip
команды, упомянутой в ответах. 2. Если вы еще не знаете, как vim, это может быть утомительно. 3. Вы можете сделать это, только если определенная функция включена при компиляции vim. Если вы устанавливаете GVim, он должен быть включен по умолчанию как в графическом интерфейсе, так и в терминальных экземплярах vim.xclip
. Ваш ответ работал как шарм.:%y+
тот, но хорошо, у вас есть все основы покрыты! Неплохо.Ответы:
Есть множество буферов обмена, с которыми вы можете иметь дело. Я предполагаю, что вы, вероятно, пользователь Linux, который хочет поместить материал в основной буфер обмена Windows. Обычно в буфере обмена, с которым вы хотите общаться, есть утилита, которая позволяет вам общаться с ним.
В случае X есть
xclip
(и другие).xclip -selection c
отправит данные в буфер обмена, с которым работает Ctrl + C, Ctrl + Vв большинстве приложений.Если вы на Mac OS X, есть
pbcopy
. напримерcat example.txt | pbcopy
Если вы находитесь в Linux терминальном режиме (без X) , а затем посмотреть на
gpm
или экран , который имеет буфер обмена. Попробуйтеscreen
командуreadreg
.Под Windows 10+ или cygwin используйте
/dev/clipboard
илиclip
.источник
/dev/clipboard
также работает для Msys / MinGW Bash Shellxclip -selection c
данные будут отправляться в буфер обмена, который в большинстве приложений работает с ^ C, ^ Vclip
как это:dir | clip
/dev/clipboard
, и оно заставляет устанавливать либо xclip, либо gpm, который по умолчанию отсутствует, по крайней мере, в Kubuntu (я думаю, в большинстве других дистрибутивов тоже) .Убедитесь, что вы используете,
alias xclip="xclip -selection c"
иначе вы не можете просто использовать Ctrl+, vчтобы вставить его обратно в другое место.Ctrl+v
=== test
источник
xclip -selection clipboard -o
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Надеюсь, это поможет.xclip
добавления новой строки,echo
есть. Попробуйprintf test | xclip -i -selection clipboard
. (printf
не добавляет новую строку, если вы не пишете'test\n'
.)echo -n
вместоprintf
.устанавливать
Если у вас нет доступа
apt-get
ни кpacman
, ни кdnf
, источники доступны на sourceforge .Настроить
удар
В
~/.bash_aliases
добавьте:Не забудьте загрузить новую конфигурацию, используя
. ~/.bash_aliases
или перезапустив свой профиль.Рыба
В
~/.config/fish/config.fish
добавьте:Не забудьте перезапустить свой экземпляр рыбы, перезапустив терминал, чтобы изменения вступили в силу.
Применение
Теперь вы можете использовать
setclip
иgetclip
, например:источник
sudo pacman -S xclip
. Но обратите внимание, что.bashrc
это не лучшее место. Я рекомендую конечному пользователю ознакомиться с правильными файлами bashrc, bash_aliases и .profile, а также с тем, как bash обрабатывает каждый из них. Совет: вместо этого поместите его в .bash_aliases.pacman
менеджера пакетов и удалено.bashrc
предложение. Я знаю,.bash_aliases
что более адаптирован, но конечный результат тот же (.bashrc
просто требует,.bash_aliases
если он существует). Если люди хотят грязной системы, пусть она будет. :).bashrc
источники.bash_aliases
в конце. ;) Я придерживаюсь этого старого соглашения, которое остается на 100% совместимым для всех версий Arch, Ubuntu / Debian, Raspberry, macOS / OSX и Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff С этим соглашением я использую одни и те же точечные файлы на всех компьютерах. Я коснулся. Это довольно мило: github.com/eduncan911/dotfilesНа MacOS использовать встроенный
pbcopy
иpbpaste
команды.Например, если вы запустите
содержимое
~/.bashrc
файла будет доступно для вставки с помощью ярлыкаCmd
+v
.источник
Пытаться
xclip
мужчина
источник
xsel на Debian / Ubuntu / Mint
устанавливать
источник
echo "foo" | xclip -selection c
?xsel
иxclip
эквивалентны во всех отношениях , за исключением тогоxclip
может считывать файлы / записи по имени, ноxsel
требует оболочки перенаправление , если вы хотите получить доступ к файлу.xsel
работает хорошо из сценариев, аxclip
работает только из командной строки. Не уверен почему.Вау, я не могу поверить, сколько есть ответов на этот вопрос. Я не могу сказать, что я пробовал их все, но я пробовал лучшие 3 или 4, и ни один из них не работает для меня. То, что сработало для меня, было ответом, находящимся в одном из комментариев, написанных пользователем по имени Дуг. Так как я нашел это очень полезным, я решил повторить в ответ.
Установите утилиту xcopy и, когда вы находитесь в Терминале, введите:
копия
Вставить
Я заметил много ответов, рекомендованных pbpaste и pbcopy. Если вам нравятся эти утилиты, но по какой-то причине они недоступны в вашем репо, вы всегда можете создать псевдоним для команд xcopy и назвать их pbpaste и pbcopy.
Итак, это будет выглядеть так:
источник
Ответ 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
источник
npm
упаковка?В подсистеме Windows для Linux вы можете скопировать в буфер обмена с помощью clip.exe.
Не забывайте использовать команду
|
pipe. И не>
команда, так как это не сработает.источник
Вот готовый скрипт bash для чтения буфера обмена, который работает на нескольких платформах. Пожалуйста, отредактируйте скрипт здесь, если вы добавите функциональность (например, больше платформ).
источник
На Windows (с Cygwin) попробуйте
cat /dev/clipboard
илиecho "foo" > /dev/clipboard
как указано в этой статье.источник
clip
. Я использую msysgit 1.9.5, и это сработало.echo "foo" > /dev/clipboard
кажется, полностью уничтожает переводы строки (не вещь \ r \ n \ n, а полностью исчезла)Только для Mac:
Эти расположены
/usr/bin/pbcopy
и/usr/bin/pbpaste
.источник
В Linux есть разные буферы обмена; у X-сервера есть такой, у оконного менеджера может быть другой и т. д. Стандартного устройства нет.
О, да, в CLI экранная программа также имеет свой собственный буфер обмена, как и некоторые другие приложения, такие как Emacs и vi .
В X вы можете использовать xclip .
Вы можете проверить эту тему для других возможных ответов: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
источник
Скопируйте и вставьте в буфер обмена в Windows (Cygwin):
Видеть:
Также существуют getclip (его можно использовать вместо Shift+ Ins!) И putclip (echo oaeuoa | putclip.exe, чтобы поместить его в клип).
источник
Это простой скрипт Python, который делает именно то, что вам нужно:
Сохраните это как исполняемый файл где-то на вашем пути (я сохранил его в
/usr/local/bin/clip
. Вы можете передать материал, который будет сохранен в буфер обмена ...И вы можете передать то, что находится в вашем буфере обмена, в другую программу ...
Запуск его сам по себе просто выведет то, что находится в буфере обмена.
источник
cat tmpfile
не операция с буфером обмена. // так же, как @horta ответы.Я нашел хорошую ссылку: /unix/69111/
В моем случае я хотел бы вставить содержимое в буфер обмена, а также посмотреть, что там вставлено, поэтому я также использовал
tee
команду с дескриптором файла:>()
это форма процесса замещения. bash заменяет каждый путь к дескриптору файла, который связан со стандартным вводом программы в круглых скобках.Команда
tee
разветвляет вашу команду, позволяя вам «передать ее содержимое» и увидеть результат в стандартном выводе «stdout»Вы также можете создавать псевдонимы для получения и записи в буфер обмена, что позволяет использовать «pbcopy» и «pbpaste», как если бы вы находились в MAC. В моем случае, поскольку я использую zsh, у меня есть это в моем файле псевдонимов:
(( $+command[name] ))
в ЗШЕ тестов , если «имя» команды установлено в вашей системе, то оба псевдонимов сгруппированы с{}
.&&
двоичная И, если б то, следовательно , если у вас есть Xclip то псевдонимами будет множество.Чтобы получить содержимое буфера обмена, просто введите:
источник
Делает работу для X Window, и он в основном уже установлен. Заглянуть в справочную страницу по xsel стоит усилий.
источник
Несколько программ для Windows, которые я написал несколько лет назад. Они позволяют вам выгружать, толкать, добавлять и распечатывать буфер обмена. Это работает так:
Включает в себя исходный код: cmd_clip.zip
источник
Есть несколько способов. Некоторые из упомянутых способов включают (я думаю) tmux, screen, vim, emacs и оболочку. Я не знаю emacs или screen, поэтому я перейду к остальным трем.
Tmux
Хотя не в выборе X, tmux имеет режим копирования доступны через
prefix-[
(prefix
это Ctrl+ Bпо умолчанию). Буфер, используемый для этого режима, является отдельным и эксклюзивным для tmux, что открывает немало возможностей и делает его более универсальным, чем выбор X в нужных ситуациях.Чтобы выйти из этого режима, нажмите q; для навигации используйте вашу
vim
илиemacs
привязку (по умолчанию = vim), поэтомуhjkl
для перемещения,v/V/C-v
для выбора персонажа / линии / блока и т. д. Когда у вас есть выбор, нажмите, Enterчтобы скопировать и выйти из режима.Чтобы вставить из этого буфера, используйте
prefix-]
.Ракушка
X11
Кажется, что любая установка по умолчанию идет с двумя программами:xclip
иxsel
(вроде как и с обеими,startx
иxinit
). В большинстве других ответов упоминаетсяxclip
, и мне очень нравитсяxsel
за его краткость, поэтому я собираюсь осветитьxsel
.Из xsel (1x) :
И это все, что вам нужно знать.
p
(или ничего) дляPRIMARY
,s
дляSECONDARY
,b
дляCLIPBOARD
,o
для вывода.Пример: скажем, я хочу скопировать вывод
foo
из TTY и вставить его на веб-страницу для сообщения об ошибке. Для этого было бы идеально скопировать в / из сеанса TTY / X. Таким образом, вопрос становится как мне получить доступ к буферу обмена из TTY?В этом примере мы предположим, что X-сеанс находится на дисплее
:1
.Тогда я могу
Ctrl-V
это в форму, как обычно.Теперь скажите, что кто-то на сайте поддержки дает мне команду на запуск, чтобы решить проблему. Это сложно и долго.
Заказ пиццы кажется продуктивным использованием командной строки.
... двигаться дальше.
напор
Если скомпилировано с
+clipboard
(Это важно! Проверьте вашvim --version
), Vim должен иметь доступ к XPRIMARY
иCLIPBOARD
выборкам. Два выбора доступны из*
и+
регистров, соответственно, и могут быть записаны и считаны с на досуге так же , как любой другой регистр. Например:Если ваша копия vim напрямую не поддерживает доступ к выборкам X, это еще не конец света. Вы можете просто использовать
xsel
технику, как описано в последнем разделе.Привязать пару комбинаций клавиш, и вы должны быть хорошими.
источник
DISPLAY=
при вызове приложения X из не-X среды. X-приложениям нужнаDISPLAY
переменная окружения, чтобы выяснить, с каким сервером (или только один сервер обрабатывает несколько сеансов?) Они общаются. ПопробуйтеDISPLAY=:1 firefox
(или каким бы ни был ваш идентификатор дисплея; мой просто так:1
) из TTY, например.:%y+
в VIM.Из этой темы есть опция, которая не требует установки какого-либо
gclip
/xclip
/xsel
стороннего программного обеспечения.Скрипт Perl (поскольку Perl обычно всегда установлен)
источник
pbcopy встроен в OSX:
Копирование содержимого .bash_profile:
источник
В macOS используйте
pbpaste
.Например:
Обновить буфер обмена
источник
Если вы похожи на меня и работаете на сервере Linux без привилегий root и у вас нет xclip или GPM, вы можете обойти эту проблему, просто используя временный файл. Например:
источник
X selections
(что подразумевается под «буфером обмена» и любые упоминания о xclip / xsel), вам нужен активный сеанс X (и, следовательно, X-сервер), чтобы вы могли получить доступ к выбору в первое место. Чтобы понять, что я имею в виду, попробуйте запуститьDISPLAY="" xsel
на своей локальной машине. Он выйдет из-за ошибки, будучи не в состоянии найти сеанс""
, и никакое взаимодействие с любым выбором X не будет выполнено. Вот почему я изначально сказал, что не вижу, как это влияет на привилегии суперпользователя: root или нет root, вы вряд ли найдете выбор X полезным в серверной среде.В Linux это работает:
источник
на Wayland xcopy не работает, вместо этого используйте wl-clipboard . например, на Fedora
источник
Существует также xclip-copyfile .
источник
Хотя> через год я поделюсь несколько другим решением. Надеюсь, это кому-нибудь пригодится.
Вчера у меня возник вопрос: «Как разделить буфер обмена между различными сессиями пользователей?» , При переключении между сессиями с ctrlaltF7-ctrlaltF8 фактически, вы не можете вставить то, что скопировали.
Я придумал следующее быстрое и грязное решение, основанное на именованном канале. Это, конечно, довольно голый и сырой, но я нашел его функциональным:
затем в отправляющем терминале
последний, в приемном терминале:
Теперь вы вводите или вставляете что-либо в первый терминал, и (после нажатия return ) оно сразу же появляется в принимающем терминале, откуда вы можете снова копировать / вставлять в любое удобное для вас место.
Конечно, это не просто строго берет контент из буфера обмена user1, чтобы сделать его доступным в буфере обмена user2, но требует дополнительной пары кликов Paste & Copy.
источник
xsel/xclip
. Например, один конец слушает, чтобы увидеть, изменился ли какой-либо из вариантов, а затем автоматически передает его (через именованный FIFO) другому сценарию, который прослушивает один или несколько каналов, который вставляет его в свой собственный выбор X. Таким образом, копирование текста автоматически приведет к тому, что тот же текст появится в выделении другого сеанса X. И не забывайте о$DISPLAY
.Рубиновый лайнер вдохновил меня попробовать Python.
Скажем, мы хотим команду, которая делает отступ в любом месте в буфере обмена с 4 пробелами. Идеально подходит для обмена фрагментами на stackoverflow.
это не опечатка. Python нужен перевод строки для цикла for. Мы хотим изменить строки за один проход, чтобы избежать создания дополнительного массива в памяти.
Если вы не против собрать дополнительный массив, попробуйте:
но, честно говоря, awk лучше для этого, чем python. Я определил этот псевдоним в моем
~/.bashrc
файлетеперь, когда я запускаю
indent
то, что находится в моем буфере обмена, отступ.источник