Що таке pbcopy OSX для Linux


141

У терміналі в OSX я можу подати вихід на pbcopy, а потім перейти у веб-браузер і вставити його. Я спробував це в Linux за допомогою xcopy, але коли я перемикаюсь на браузер, він просто переписує буфер обміну тим, що було в ньому в останній раз, коли браузер використовувався. Що працює як pbcopy в Linux?


2
... а для тих, хто не знає, що таке pbcopy, ось авторська сторінка developer.apple.com/library/mac/#documentation/Darwin/Reference/…
Роб Коуелл

Інструмент, який може бути корисним для цього, є ClipIt (і подібні менеджери буфера обміну). Він не тільки добре грає в терміналі, але також зберігає історію буфера обміну. Досить корисно.
brandizzi

Відповіді:


162

якщо у вас встановлено X, ви можете спробувати xsel таким чином:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

або з xclip:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

тепер ви можете використовувати'em:

echo 'go to my clipboard' | pbcopy

коли у мене немає XI використовувати функцію GNU Screen, щоб копіювати між відкритими оболонками в сеансі за допомогою клавіатури

скопіювати: Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

наклеїти: Ctrl-a + ]

* рухи виконуються з vim, як ключові прив’язки (j, k, l & m).


1
Дякую, це саме та інформація, яку я хотів. Тепер мені цікаво, чи є спосіб, яким я міг би зробити Екран, дозвольте мені використовувати команди Emacs для вибору області, яку я хочу скопіювати ...
Ной Суссман,

8
xsel: Неможливо відкрити дисплей: (null): Невідповідний ioctl для пристрою
itsazzad

Проблему "Не вдається відкрити дисплей" я вирішив у Windows, встановивши Xming та встановивши DISPLAY =: 0
scottgwald

1
Для користувачів tmux це більше схоже Ctrl-b, [ -> go to position -> Space -> select texts -> Enterі вставитиCtrl-b, ]
el que m'est

Коли це можливо - якщо це, звичайно, ви хочете, звичайно, замість того, щоб ускладнювати простір імен за допомогою псевдоніму у своєму профілі, краще буде створити базовий сценарій для цього /bin/. Особливо, якщо ви ділитесь своїм профілем між macOS та linux машинами.
Бенджамін Р

9

Помістіть такий сценарій, який називається pbcopy, у вашу папку bin:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

Це додасть STDIN як у ваш буфер вибору, так і в буфер обміну:

echo Hello world |pbcopy

Навіщо це catпотрібно? Чи не буде в цьому випадку просто перенаправлення stdin до stdout, таким чином марне зловживання котами чи я щось пропускаю?
Хультнер

2
Ви маєте рацію, це здається марним зловживанням котами :-)
Ерік,

2
якщо ви (як і я) цікавитесь, де знаходиться таємнича «непотрібна кішка», її видалено редакцією. NTS: у разі заплутаних коментарів перевірте історію ^^ '
yaitloutou

Як вставити вміст після використання? Просто за допомогою xclip -o? Або є кращий спосіб?
n1k31t4

@ n1k31t4 Те, що я зробив, було зробити еквівалентний сценарій, використовуючи xclip -sel c -oдля сценарію at /bin/pbpaste.
Бенджамін Р

5

Розширити рішення @Erik та @xpixelz; ці два сценарії повинні працювати на обох платформах:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi

Але чому б у вас навіть був цей скрипт на OS X, де він є частиною рідної країни?
Хультнер

* як орієнтир для подібної функціональності, * кросплатформенні dotfiles
Уес Тернер

Ще зловживають котами, а чому б не перевірити, чи існує натомість xclip та призначити псевдонім, якщо він є? Або перевірте, чи існує бінарний параметр pbpaste. Перевірка уніме здається дивним підходом до проблеми.
Хультнер

2
@Hultner "Перевірка уніме здається дивним підходом до проблеми" Ви також можете перевірити наявність бінарних файлів, переважно, за винятком випадків присвоєння a / ${a:-${b:-${c:+${d}}}}some type -P/ hasзмінних та / bin / test execs.
Уес Тернер

2

Ця відповідь стосується підсистеми Linux для Windows.

Коротка відповідь: використовуйте clip.exeтак, ніби pbcopyдля того, щоб щось помістити в буфер обміну Windows. Це магія. Приклад echo "Hello Windows" | clip.exeу вашому терміналі bash або Ubuntu bash, а потім `ctrl-v 'в програмі Windows.

Більше контексту:

У коментарі вище я згадував, що, використовуючи Xming у Windows для активізації цієї функціональності, необхідно встановити змінну DISPLAY ( export DISPLAY=:0у багатьох випадках) перед тим, як рішення xselі xclipспрацьовують рішення. Настійно це рішення працює ненадійним, стохастичним способом - коли вставляти з Linux на Windows, натискання ctrl-vміж одним і десятьма разів спричиняє вклеювання буфера обміну (один раз) (це в моїй Windows 10 Surface Book 2). Не витрачайте час, використовуйте clip.exe.

ПРИМІТКА. Не забувайте про це .exe. Інакше Ubuntu bash запропонує встановити пакет Linux geomview, який не є тим, що потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.