Как передать стандартный вывод терминала (stdout) в буфер обмена?

106

Например,

Скажем, я хочу перечислить содержимое папки и напрямую вставить ее в окно чата, чтобы его увидел друг.

Я понимаю, что могу ls > filename.txtсоздать файл (filename.txt) с этим содержимым; Затем мне пришлось бы открыть или распечатать файл и вручную выбрать и скопировать текстовый блок ( что может раздражать / утомительно ). Я также мог бы выбрать и скопировать вывод lsнепосредственно из окна терминала.

Было бы намного быстрее / проще просто передать стандартный вывод в буфер обмена .

Какая команда терминала позволяет мне сделать это?

Insperatus
источник
1
unix.stackexchange.com/questions/3892/…
Сиро Сантилли 新疆 15 中心 法轮功 六四 事件

Ответы:

122

Это можно сделать с помощью утилит командной строки xsel или xclip . Поскольку ни одна из программ не поставляется с Ubuntu по умолчанию, вам необходимо сначала установить их с помощью Ubuntu Software или терминала. Вот как в терминале (но помните, вам нужен только один из этих двух.)

sudo apt install xsel
sudo apt install xclip

Теперь несколько примеров. Если вы хотите скопировать вывод lsв буфер обмена, вот что вы должны сделать:

С помощью xsel:

ls | xsel -ib

С помощью xclip:

ls | xclip -sel clip

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

С помощью xsel:

sudo lshw -C network | xsel -ib

С помощью xclip:

sudo lshw -C network | xclip -sel clip

Сделайте это еще проще с новым псевдонимом bash!

Отредактируйте ваш ~/.bash_aliasesфайл (если он еще не создан, сначала создайте его с помощью touch ~/.bash_aliases)

Затем добавьте одну (в зависимости от того, с какой программой вы решили пойти) следующее:

alias copy='xclip -sel clip'

или же

alias copy='xsel -ib'

Затем сохраните и закройте.

Теперь (после перезапуска вашего терминала) вы можете отправить стандартный вывод в буфер обмена, просто отправив его в «copy» (или как вы решите назвать новый псевдоним)

Например:

ls | copy
Insperatus
источник
1
С более новыми версиями Ubuntu, вы должны использовать apt. Так sudo apt install xselили sudo apt install xclip.
Висбуки
1
Спасибо за ответ, но знаете ли вы что-нибудь только для терминала Linux?
Мохамад
1
@jpaugh. Сравните документацию по управлению пакетами Ubuntu для 16.04 против 14.04 . В 16.04 он только упоминает aptи не упоминается apt-get. Вы все еще можете использовать apt-get, но они пытаются поощрить людей использовать apt.
Висбуки
2
Вам не нужно перезагружать терминал; Вы можете простоsource ~/.bash_aliases
Роб К
1
@Mohamad Они предназначены для работы внутри X-сервера (поскольку он обеспечивает функциональность буфера обмена). Если у вас его нет, вам нужно сделать это в эмуляторе терминала. Как это сделать, зависит от используемого вами программного обеспечения, поскольку де-факто для этого не существует стандарта.
Торбьерн Равн Андерсен
2

Если вы пытаетесь скопировать в буфер обмена с помощью Ubuntu в Windows Subsystem for Linux (WSL), xsel или xclip не будут работать, если вы не используете X Windows, поскольку буфер обмена предназначен только для графического интерфейса. Однако для передачи стандартного вывода терминала в буфер обмена в WSL Ubuntu вы можете использовать clip.exe. Затем вы можете вставить в терминал WSL Ubuntu стандартные команды вставки, и скопированный текст будет доступен и в Windows. Например,

pwd | clip.exe 

скопирует текущий рабочий каталог в буфер обмена (Windows).

Этот результат поиска появляется вверху при поиске способов копирования / вставки текста в WSL, поэтому я думаю, что стоит упомянуть об этом, чтобы читатели не устанавливали xsel или xclip в Ubuntu без необходимости и вместо этого использовали clip.exe.

Snap Shot
источник