Прямое копирование в буфер обмена с шелла

Очень часто, когда я работаю в командной строке возникает надобность перебросить результат работы какой-то команды в буфер обмену, или наоборот. Кто-то спросит, почему нальзя просто скопировать ? Но, на то что-бы выделить текст надо потратить время, да и копировать в буфер обмену большие файлы не удобно. Во многих ОС есть разные программы которые позволяют копировать результат работы одной программы в буфер обмену. Начну я пожалуй с GNU/Linux (это касается и *BSD и других систем где используется X11).
В X11 это делается с помощью программы xsel. Перед тем как писать как пользоваться программой, я хотел бы отметить некоторые особенности работы буфер обмены в Х11. В Х11 существует несколько буферов: PRIMARY, SECONDARY и CLIPBOARD. В буфер PRIMARY попадает любой выделенный текст, затем когда выделяется следующий содержимое PRIMARY перемещается в SECONDARY, а в PRIMARY попадёт новый выделенный текст. В CLIPBOARD текст попадает только при явном копировании выделенного текста. Подробнее о работе выделение Х11 читайте на вики. Теперь, как вы поняли что скорее всего вам понадобится как раз буфер CLIPBOARD, этот буфер задаётся программе опцией -b. Так что вставить содержимое буфера обмены можно с помощью такой команды:

xsel -b

Это можно использовать например для копирования содержимого буфера обмены в файл, например так:

xsel -b > file_name.txt

Если надо наоборот записать в буфер обмену — то используется опция -i

xsel -b -i

Она читает ввод со стандартного потока ввода (тоесть stdin), так что можно писать через pipe вот так:

cat file_name | xsel -b -i

Помимо xsel есть аналогичная программа xclip.

Я повторю что всё что было выше касается только Х11. В Mac OS X некоторые программы работают через Х11 и для них подобный способ тоже будет работать. Хотя в Mac OS X есть свои родные программы для манипулирования буфер обменой, а именно это pbcopy и pbpaste. Использовать xsel или что-то подобное (что работает через Х11) в Mac OS X не имеет смысла так как буфер обмена X11 синхронизируется с системной ( смысл есть если надо получить доступ к другому типу буфера X11). Как можно догадаться из названия pbcopy — копирует в буфер обмену, а pbpaste вставляет от туда. Пользоваться можно также:


cat file_name | pbcopy
pbpaste

У Mac OS X также есть несколько буферов: general, ruler, find и font. В general как раз находится тот текст который вы явно копируете. В find копируется текст который вы ищете.

Помимо разных типов буферов, содержимое буферов можно получить в разных форматов с помощью опции -Prefer. Она может возращать результат в таких форматах: txt, rtf, ps. Подробнее читайте документацию этих команд.

Вы не поверите, но в ОС Windows есть аналогичная программа ( не всех версиях :) ), называется clip, но она позволяет только копировать, не вставлять.
Использовать можно так:


type file_name | clip

Или так:

clip < file_name

Запись опубликована в рубрике Tips & trics, Заметки с метками , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>