Как выглядит OSX pbcopy для Linux

141

В терминале в OSX я могу перенаправить вывод в pbcopy, а затем зайти в веб-браузер и вставить его. Я попробовал это в Linux с xcopy, но когда я переключаюсь на браузер, он просто перезаписывает буфер обмена тем, что было в нем при последнем использовании браузера. Что работает как pbcopy в Linux?

tony_sid
источник
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'

Теперь вы можете использовать их:

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).

amized
источник
1
Спасибо, это именно та информация, которую я хотел. Вот теперь мне интересно, есть ли способ, которым я мог бы сделать Screen, позволяющий мне использовать команды Emacs, чтобы выбрать область, которую я хочу скопировать ...
Ноа Суссман
8
xsel: Не удается открыть дисплей: (null):
неподходящий
Я решил проблему «Не могу открыть дисплей» в Windows, установив Xming и установив DISPLAY =: 0
scottgwald
1
Для пользователей tmux это больше похоже на Ctrl-b, [ -> go to position -> Space -> select texts -> EnterвставкуCtrl-b, ]
elquimista
Когда это возможно - если это что-то постоянное, что вам нужно, конечно, - вместо того, чтобы усложнять ваше пространство имен псевдонимами в вашем профиле, будет лучше создать базовый сценарий для этого /bin/. Особенно, если вы разделяете свой профиль между компьютерами MacOS и Linux.
Бенджамин Р
9

Поместите такой скрипт pbcopy в папку bin:

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

Это поместит STDIN и в ваш буфер выбора, и в буфер обмена:

echo Hello world |pbcopy
Erik
источник
Зачем это catнужно? Не будет ли это просто перенаправить stdin на stdout в этом случае, таким образом, бесполезно издеваться над кошкой или я что-то упустил?
Халтнер
2
Вы правы, это кажется бесполезным издевательством над кошкой :-)
Эрик
2
если вам (как и мне) интересно, где находится таинственный «бесполезный кот», он был удален редактором. NTS: в случае запутанных комментариев, проверьте историю ^^ '
yaitloutou
Как вы вставляете содержимое после использования? Просто используете xclip -o? Или есть лучший способ?
n1k31t4
@ n1k31t4 Я сделал эквивалентный скрипт xclip -sel c -oдля скрипта в /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, где он является частью собственного пользовательского пространства?
Халтнер
* в качестве ссылки для аналогичной функциональности, * кроссплатформенные точечные файлы: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Уэс Тернер,
Все еще злоупотребление кошкой и почему бы не проверить, существует ли вместо этого xclip, и назначить псевдоним, если он существует? Или проверьте, существует ли двоичный файл pbpaste. Проверка uname кажется странным подходом к проблеме.
Халтнер
2
@Hultner «Проверка uname кажется странным подходом к проблеме». Вы также можете проверять двоичные файлы, предпочтительно, по порядку, за исключением присваиваний a ${a:-${b:-${c:+${d}}}}и some type -P/ hasvariable и execs / bin / test.
Уэс Тёрнер
2

Этот ответ относится к подсистеме Linux для Windows.

Краткий ответ: используйте, clip.exeкак если бы это было pbcopyдля того, чтобы поместить что-то в буфер обмена Windows. Это магия. Пример echo "Hello Windows" | clip.exeв вашем терминале bash или Ubuntu, а затем `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, а это не то, что вам нужно.

scottgwald
источник