Труба в / з буфера обміну в сценарії Bash


945

Чи можливо трубу в / з буфера обміну в Bash?

Незалежно від того, чи це трубопровід до / з ручки пристрою або за допомогою допоміжного додатку, я нічого не можу знайти.

Наприклад, якби /dev/clipпристрій, що посилався на буфер обміну, ми могли б зробити:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

3
Я використовував :%y+vim, який vim-говорить для "yank (копіювання) всіх рядків в регістр" + "( PRIMARYбуфер обміну X )". Ви можете замінити %діапазон, якщо хочете бути конкретними. Але є три застереження: 1. Тепер ви повинні зберегти будь-який текст у файл, перш ніж ви зможете скопіювати його. Це на відміну від xclipкоманди, зазначеної у відповідях. 2. Якщо ви ще не знаєте, як зробити вим, це може бути нудно. 3. Ви можете це зробити, лише якщо під час компіляції vim увімкнено певну функцію. Якщо ви встановите GVim, він повинен бути включений за замовчуванням як в GUI, так і в термінальних екземплярах vim.
Бреден Кращий

1
@BradenBest ви повинні поставити це як відповідь. Я перебуваю в середовищі NIX і не вдалося встановити xclip. Ваша відповідь спрацювала як шарм.
HankCa

@HankCa Добре, я опублікував відповідь . Скажи мені, що ти думаєш.
Бреден Кращий

@BradenBest - це дуже вичерпна відповідь. Мені просто сподобався той, :%y+але гаразд, ти маєш усі бази! Хороший.
HankCa

Інший варіант: використання невеликого сценарію Perl: установка не потребує. Дивіться мою відповідь нижче .
VonC

Відповіді:


861

Є безліч буфер обміну, з яким ви могли мати справу. Я думаю, що ви, напевно, користувач Linux, який хоче помістити речі в основний буфер обміну X Windows. Зазвичай буфер обміну, з яким ви хочете поговорити, має утиліту, яка дозволяє вам спілкуватися з ним.

У випадку X є xclip(та інші). xclip -selection cнадсилатиме дані до буфера обміну, з яким працює Ctrl + C, Ctrl + Vу більшості програм.

Якщо ви на Mac OS X, є pbcopy.

Якщо ви перебуваєте в термінальному режимі Linux (немає X), тоді загляньте у екранgpm або на буфер обміну. Спробуйте команду .screenreadreg

У Windows 10+ або cygwin використовуйте /dev/clipboardабо clip.



24
у Windows, /dev/clipboardтакож працює для бомбових снарядів Msys / MinGW
Mihai Rotaru

71
Зауважте, що xclip -selection cнадсилатиме дані до буфера обміну, який працює з ^ C, ^ V у більшості програм
Klaas van Schelven

31
на новіших версіях Windows Ви можете просто використовувати , clipяк це:dir | clip
maep

11
Сумно, що в GNU / Linux немає такого пристрою як /dev/clipboard, і змушує встановити або xclip або gpm, який за замовчуванням відсутній, принаймні, у Kubuntu (я думаю, і в більшості інших дистрибутивів) .
Привіт-Ангел

282

Переконайтеся, що ви використовуєте в alias xclip="xclip -selection c" іншому випадку, ви не можете просто використовувати Ctrl+, vщоб вставити його назад в інше місце.

echo test | xclip    

Ctrl+v === test


1
Як можна було б вставити його без аргументу команди?
Йона

15
xclip -selection clipboard -o
дог

32
оскільки я переходжу назад і назад між osx та linux, у моїх dotfiles я маю наступне. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Сподіваюся, що це допомагає.
дог

15
@ApockofFork, xclipне додаючи новий рядок, echoє. Спробуйте printf test | xclip -i -selection clipboard. ( printfне додавати новий рядок, якщо ви не пишете 'test\n'.)
David X

7
Або використовувати echo -nзамість printf.
Крістіан Піетш

182

Встановити

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Якщо у вас немає доступу apt-getні до pacman, ні dnf, джерела доступні у sourceforge .

Налаштування

Баш

В ~/.bash_aliases, додайте:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

Не забудьте завантажити свою нову конфігурацію за допомогою . ~/.bash_aliasesабо перезапустивши профіль.

Риба

В ~/.config/fish/config.fish, додайте:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

Не забудьте перезапустити свій екземпляр риби, перезапустивши термінал, щоб застосувати зміни.

Використання

Тепер ви можете використовувати setclipі getclip, наприклад:

$ echo foo | setclip
$ getclip
foo

3
Для всіх інших дистрибутивів: ви можете завантажити джерело з sourceforge.net/projects/xclip
Scz

+1 Найкраще рішення! В Arch, sudo pacman -S xclip. Але зауважте, що .bashrcце не найкраще місце. Я рекомендую enduser прочитати на належних файлах bashrc, bash_aliases та .profile та як bash обробляє кожен. Порада: помістіть його замість .bash_aliases.
eduncan911

1
Дякую @ eduncan911! :) Додана можливість використання pacmanменеджера пакунків та видалена .bashrcпропозиція. Я знаю .bash_aliases, більш адаптований, але кінцевий результат такий же ( .bashrcпросто потрібно, .bash_aliasesякщо він існує). Якщо люди хочуть безладної системи, нехай вони мають. :)
tleb

@EladTabak Щасливий, це допомогло.
tleb

1
@jpaugh ти прав. мої .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
eduncan911

143

На macOS використовуйте вбудовані pbcopyта pbpasteкоманди.

Наприклад, якщо ти біжиш

cat ~/.bashrc | pbcopy

вміст ~/.bashrcфайлу буде доступний для вставки за допомогою ярлика Cmd+ v.



25

xsel на Debian / Ubuntu / Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Встановити

sudo apt-get install xsel

Чим це відрізняється від echo "foo" | xclip -selection c?
Лео Леопольд Герц 준영

Є кілька відповідей на цей Ask Ubuntu відповідь , але , головним чином , xselі xclipеквівалентні в усіх відношеннях , за винятком того xclipможе зчитувати файли / запису на ім'я, але xselвимагає оболонки перенаправлення , якщо ви хочете отримати доступ до файлу.
Колін Д Беннетт

xselпрацює добре зі сценаріїв, тоді xclip як працює тільки з підказки. Не знаю чому.
NVRM

16

Нічого собі, я не можу повірити, скільки відповідей на це питання. Я не можу сказати, що я спробував їх усіх, але я спробував топ-3 або 4, і жоден з них не працює на мене. Що для мене працювало - це відповідь, розміщена в одному з коментарів, написаних користувачем під назвою doug. Оскільки я вважаю це настільки корисним, я вирішив повторно відповісти.

Встановіть утиліту xcopy і коли ви перебуваєте в Терміналі, введіть:

Скопіювати

Thing_you_want_to_copy|xclip -selection c

Вставити

myvariable=$(xclip -selection clipboard -o)

Я помітив багато відповідей, рекомендованих pbpaste та pbcopy. Якщо ви користуєтесь цими утилітами, але з якоїсь причини вони недоступні для вашого репо, ви завжди можете зробити псевдонім для команд xcopy та назвати їх pbpaste та pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Так тоді це виглядатиме так:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Чудово, ваша псевдонімна частина досить добре відповідає MacOS.
MeadowMuffins

15

Відповідь 2018 року

Використовуйте буфер обміну-кліп . Він працює з macOS, Windows, Linux, OpenBSD, FreeBSD та Android без реальних проблем.

Встановіть його за допомогою:

npm install -g clipboard-cli

Тоді ви можете зробити

echo foo | clipboard

Якщо ви хочете, ви можете псевдонім cb, поставивши його в вашому .bashrc, .bash_profileчи .zshrc:

alias cb=clipboard


2
Ви впевнені, що це безпечний npmпакет?
Джонні

3
@ Сподіваюсь, я би сподівався, що його створив Сіндресорхус ( github.com/sindresorhus ), найбільш плідний учасник вузлів. Він відповідає за бібліотеку тестування Ava, лінійку Xo, Yeoman та безліч інших проектів. Він також відповідає за незліченну кількість маленьких бібліотек, як ця, що колективно розміщує свій код майже на кожному веб-сайті, що використовує JS, в Інтернеті. Це не означає, що він не може бути скомпрометований; лише те, що кількість очей на його репост і його власна репутація роблять це набагато менш імовірним, ніж більшість випадкових репостів на хвилину.
Еван Конрад

Класно! Робота над Ubuntu GNU / Linux, де xclip не працює.
Кевін Букс

14

У підсистемі Windows для Linux ви можете скопіювати у буфер обміну за допомогою clip.exe.

cat file | clip.exe

Майте на увазі використання команди |pipe. І не >команда, оскільки це не спрацює.


11

Ось готовий до використання скрипт bash для читання буфера обміну, який працює на декількох платформах. Будь ласка, відредагуйте скрипт тут, якщо ви додасте функціональність (наприклад, більше платформ).

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp

Брах, це насправді працює, чому це не відповідь?
255.tar.xz

9

У Windows (разом із Cygwin) спробуйте cat /dev/clipboardабо echo "foo" > /dev/clipboardяк зазначено в цій статті.


1
Як згадується користувачем @maep в окремому коментарі, новіші версії Windows (я можу підтвердити лише для Win10) можуть просто передати clip. Я використовую msysgit 1.9.5, і це спрацювало.
Шон Еркхарт

echo "foo" > /dev/clipboardздається, повністю знищить нові рядки (не річ \ r \ n \ n, але повністю пішла)
користувач1529413

9

Лише для Mac:

echo "Hello World" | pbcopy
pbpaste

Вони розташовані /usr/bin/pbcopyі /usr/bin/pbpaste.


8

У Linux є різні буфери обміну; X-сервер має його, у вікні диспетчера може бути інший тощо. Стандартного пристрою немає.

О так, у CLI, екранна програма також має власний буфер обміну, як і деякі інші програми, такі як Emacs та vi .

У X можна використовувати xclip .

Ви можете перевірити цю тему на інші можливі відповіді: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html


2
Здається, що створення / dev / clip було б хорошим проектом для когось.
ТЕД

2
Я прекрасно знаю безліч буферів обміну. Як це ускладнює відповідь на моє запитання?
moinudin

Було б сенс, як буферні щити були стандартизовані, ймовірно, це не зашкодить, якщо ви можете використовувати / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> для доступу до них, єдине питання полягає в тому, що вони специфічні для користувача та пристрої загальносистемні. Але якщо зробити драйвер пристрою ядра, який маскується відповідно до доступу UID, він повинен працювати, як очікувалося.

5

Скопіюйте та вставте в буфер обміну в Windows (Cygwin):

Подивитися:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

Також існують getclip (його можна використовувати замість Shift+ Ins!) Та putclip (echo oaeuoa | putclip.exe, щоб помістити його в кліп).


4

Це простий скрипт Python, який робить саме те, що вам потрібно:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

Збережіть це як виконуваний файл десь на вашому шляху (я зберег його /usr/local/bin/clip. Ви можете передавати речі, які потрібно зберегти у буфер обміну ...

echo "Hello World" | clip

І ви можете передавати те, що є у вашому буфері обміну, для якоїсь іншої програми ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Якщо запустити його самостійно, буде просто виводитись із буфера обміну.


Це працює, коли ви перебуваєте на одному комп’ютері, але не дозволяє копіювати речі між комп'ютерами.
Чарльз Плегер

видається лише `echo str> tmpfile`, а cat tmpfileне операцією буфера обміну. // те саме, що @horta відповідає.
yurenchen

Здається, це не встановлює змінну буфера обміну, тому я не можу вставити вміст в іншу програму - це не справжній буфер обміну!
jena

4

Я знайшов хорошу довідку: /unix/69111/

У моєму випадку я хотів би вставити вміст у буфер обміну, а також побачити, що там вставлено, тому я також використав teeкоманду з дескриптором файлу:

echo "just a test" | tee >(xclip -i -selection clipboard)

>()є формою заміщення процесу. bash замінює кожен шлях до дескриптора файлу, який підключений до стандартного вводу програми в дужках.

The teeКоманда вашої команди Сервер породжує дозволяючи вам «труби її зміст» і побачити результат на стандартний висновок «стандартний висновок»

Ви також можете створити псевдоніми, щоб отримувати та писати у буфер обміну, дозволяючи використовувати "pbcopy" та "pbpaste" так, як ніби ви на MAC. У моєму випадку, коли я використовую zsh, я маю це у своєму файлі псевдонімів:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

(( $+command[name] ))в ЗШЕ тестів , якщо «ім'я» команди встановлено у вашій системі, то обидва псевдонімів згруповані з {}. the &&є двійковим AND, якщо a тоді b, отже, якщо у вас є xclip, тоді псевдоніми будуть встановлені.

echo "another test" | tee >(pbcopy)

Щоб отримати вміст буфера обміну, просто введіть:

pbpaste | "any-command-you-need-here"

4
  xsel -b

Робить роботу для X Window, і вона здебільшого вже встановлена. Подивитися на сторінку людини xsel варто докласти зусиль.


2

Кілька програм Windows, які я писав років тому. Вони дозволяють скидати, штовхати, додавати та друкувати буфер обміну. Це працює так:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Він включає вихідний код: cmd_clip.zip


2

Є кілька способів. Деякі із згаданих способів включають (я думаю) tmux, екран, vim, emacs та оболонку. Я не знаю emacs або екран, тому перейду інші три.

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

Параметри введення

-а, --додавати

додати стандартний вхід до вибору. Наслідки .

-f, - далі

додавати до вибору при збільшенні стандартного введення. Наслідки .

-i, --вхід

читати стандартне введення у вибір.

Варіанти виводу

-o, - вихід

записати виділення на стандартний вихід.

Варіанти дій

-c, - ясно

очистити вибір. Переосмислює всі параметри введення.

-d, - видалити

Попросіть видалити поточний вибір. Це не тільки очищає вибір, але й запитує програму, в якій знаходиться вибір, щоб вибраний вміст було видалено. Переосмислює всі параметри введення.

Параметри вибору

-p, - первинний

працювати з вибором PRIMARY (за замовчуванням).

-s, - вторинний

оперувати за вибором SECONDARY.

-b, --clipboard

працювати з вибором CLIPBOARD.

І це про все, що вам потрібно знати. p(або нічого) для PRIMARY, sдля SECONDARY, bдля CLIPBOARD,o для виведення.

Приклад: скажіть, що я хочу скопіювати вихід fooз TTY і вставити його на веб-сторінку для звіту про помилку. Для цього було б ідеально скопіювати в / з сесії TTY / X. Тож питання стає як мені отримати доступ до буфера обміну з TTY?

У цьому прикладі ми припустимо, що X сеанс відображається на дисплеї :1.

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Тоді я можу Ctrl-Vце у формі, як зазвичай.

Тепер скажіть, що хтось на сайті підтримки дає мені команду запустити, щоб вирішити проблему. Це складно і довго.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

Замовлення піци здається продуктивним використанням командного рядка.

...жити далі.

Вим

Якщо компільовано з +clipboard(Це важливо! Перевірте свою vim --version), Vim повинен мати доступ до X PRIMARYта CLIPBOARDвибору. Два вибору доступні відповідно до реєстрів *та +регістрів і можуть бути записані та прочитані у вільний час так само, як і будь-який інший реєстр. Наприклад:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

Якщо ваша копія vim не підтримує прямо доступ до вибору X, проте це ще не кінець світу. Можна просто використовувати xselметодику, як описано в останньому розділі.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Зв’яжіть кілька ключових комбо, і ви повинні бути хорошими.


Однозначно завжди пам’ятайте використовувати DISPLAY=при виклику програми X з не-X середовища. Програмам X потрібна DISPLAYзмінна середовище, щоб визначити, на якому сервері (чи є лише один сервер, який обробляє кілька сеансів?), З якими вони спілкуються. Спробуйте DISPLAY=:1 firefox(або як би це не було :1), наприклад, у TTY, наприклад , у мого .
Бреден Кращий

Для мене вибір у моєму середовищі був :%y+у VIM.
HankCa

2

З цього потоку є параметр, який не вимагає встановлення будь-якого gclip/ xclip/ xselстороннього програмного забезпечення.

Сценарій perl (оскільки perl зазвичай завжди встановлюється)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Як би я цим скористався? Зберегти скрипт у PATH та передати його? Я намагаюся написати оболонку кліпу для скриньки, щоб скопіювати посилання для обміну, тому мені просто потрібна вона для обробки тексту.
jena


2

pbcopy вбудований в OSX:

Копіювання вмісту .bash_profile:

cat ~/.bash_profile | pbcopy

1

У macOS використовуйте pbpaste .

Наприклад:

Оновіть буфер обміну

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

1

Якщо ви схожі на мене і працюєте на сервері Linux без привілеїв root, і немає ніяких xclip або GPM, ви могли б вирішити цю проблему, просто скориставшись тимчасовим файлом. Наприклад:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Я не бачу, як нестача кореневих привілеїв впливає на це.
Бреден Кращий

3
@BradenBest Відсутність привілеїв root означає, що я не міг встановити речі.
хорта

Але що б ви встановили? X? На сервері? Якщо ви не хостите якусь дивну послугу переадресації X, я не можу зрозуміти, чому ви коли-небудь хотіли б це зробити.
Бреден Кращий

@BradenBest Не впевнений. Яка б програма чи послуга не дозволили б мені виконати копіювальну пасту.
хорта

1
Що ж, якщо ви використовуєте будь-який із X selections(який обов'язково мається на увазі "буфер обміну" та будь-які згадки про xclip / xsel), вам потрібен активний X-сеанс (і, таким чином, X-сервер), щоб ви могли отримати доступ до вибору в першість. Щоб побачити, що я маю на увазі, спробуйте запустити DISPLAY="" xselна локальній машині. Він вийде з помилки, оскільки не зможе знайти сеанс "", і взаємодія з будь-яким виділенням X не буде здійснено. Ось чому я спочатку сказав, що не бачу, як кореневі привілеї враховують це: root або no root, ви, швидше за все, не знайдете X-вибір, корисний у серверному середовищі.
Бреден Кращий




0

Хоча> через 1 рік я поділяю трохи інше рішення. Сподіваюся, це комусь корисно.

Вчора я опинився з питанням: "Як поділитися буфером обміну між різними сеансами користувачів?" . При переході між сеансами за допомогою ctrlaltF7-ctrlaltF8 насправді ви не можете вставити те, що скопіювали.

Я придумав таке швидке та брудне рішення, засноване на названій трубі. Це, звичайно, досить голо і сиро, але я вважаю це функціональним:

user1@host:~$ mkfifo /tmp/sharedClip

потім у терміналі відправки

user1@host:~$ cat > /tmp/sharedClip

останнє, в приймальному терміналі:

user2@host:~$ cat /tmp/sharedClip

Тепер ви вводите або вставляєте що-небудь у перший термінал і (після натискання) return ) воно з’явиться негайно у приймальному терміналі, звідки ви зможете знову скопіювати / вставити де завгодно.

Звичайно, це не просто суворо приймає вміст з буфера обміну user1, щоб зробити його доступним у буфері обміну користувачем2, але для цього потрібна додаткова пара кліків Вставити та скопіювати.


Це не здається занадто дивним. Два різних X сервери = два різних набори вибору. Однак ви можете налаштувати сценарій, який здійснює введення / виведення через xsel/xclip. Наприклад, один кінець слухає, щоб побачити, чи змінився який-небудь з виділених елементів, а потім автоматично передає його (через названий FIFO) на інший сценарій, який прослуховує одну або декілька труб, яка вставляє його у свій власний X вибір. Таким чином, копіювання тексту автоматично призведе до того, що той самий текст з’явиться у виборі іншого X сеансу. І не забувайте про це $DISPLAY.
Бреден Кращий

0

Рубін oneliner надихнув мене спробувати пітон.

Скажімо, ми хочемо, щоб команда відступала все, що є у буфері обміну, на 4 пробіли. Ідеально підходить для обміну фрагментами в stackoverflow.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

це не помилка. Для створення циклу Python потрібні нові рядки. Ми хочемо змінити рядки за один прохід, щоб уникнути створення зайвого масиву в пам'яті.

Якщо ви не проти створити додатковий масив, спробуйте:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

але, чесно кажучи, awk для цього краще, ніж python. Цей псевдонім я визначив у своєму ~/.bashrcфайлі

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

тепер, коли я запускаю indentвсе, що є в моєму буфері обліку, з відступом.

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