Як я можу скопіювати вихід команди безпосередньо в буфер обміну?


528

Як я можу передати висновок команди в буфер обміну і вставити його назад під час використання терміналу? Наприклад:

cat file | clipboard


можливий дублікат superuser.com/questions/104981/…
Чамп

Я щойно задав відповідне запитання, оскільки не можу змусити xclip працювати під час входу в Ubuntu з Git Bash у Windows: stackoverflow.com/q/60117294/470749
Ryan

1
Збережіть вміст файлу на дошці кліпів. apt install xclipіcat file | xclip -sel clip
EsmaeelE

Відповіді:


597

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

Спочатку встановіть програму на 16 кБ під назвою xclip:

sudo apt-get install xclip

Потім ви можете xclipпередати висновок, який потрібно скопіювати у буфер обміну:

cat file | xclip

Щоб вставити текст, який ви тільки що скопіювали, використовуйте:

xclip -o

Щоб спростити життя, ви можете налаштувати псевдонім у файлі .bashrc, як я це зробив:

alias "c=xclip"
alias "v=xclip -o"

Щоб побачити, наскільки це корисно, уявіть, що я хочу відкрити свій поточний шлях у новому вікні терміналу (можуть бути інші способи зробити це як Ctrl+ Tу деяких системах, але це лише для ілюстрації):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Зауважте ` ` навколо v. Це vспочатку виконується як команда, а потім заміняє його на місці для cdвикористання.

Копіюйте вміст у Xбуфер обміну

cat file | xclip

Якщо ви хочете вставити інше, крім Xпрограми, спробуйте це:

cat file | xclip -selection clipboard

144
"cat file | xclip" скопіюйте лише вміст у буфер обміну "X", якщо ви хочете вставити десь інше, ніж додаток "X", спробуйте це: "cat file | xclip -selection clipboard"
khotyn

5
Ваш вибір ручки відповідний!
Метт Столяр

4
Якщо ви хочете видалити символ нового рядка, щоб ви могли безпосередньо вставити та відредагувати результат "pwd | c", ви можете зробити "pwd | tr -d '\ n' | xclip -selection c"
Анаке

12
також визначити alias "cs=xclip -selection clipboard"та alias "vs=xclip -o -selection clipboard"спростити копіювання / вставлення з буфера обміну системою
Yibo Yang

1
А як щодо рішення, де у мене немає доступу до sudo, а xclip не встановлений ??
DanGordon

179

У OS X використовуйте pbcopy; pbpasteйде в зворотному напрямку.

pbcopy < .ssh/id_rsa.pub

14
Юпи! Так само, як наприклад для:pbcopy < .ssh/id_rsa.pub
doublejosh

не працює для виведення команд через - наприкладpbcopy < git merge-base master some-branch
Ben

якщо ви використовуєте tmux, він не працюватиме, якщо ви повторно не приєднаєте сеанс: superuser.com/a/413233/146254
Atav32,

1
Ви також можете використовувати cat, якщо ви вже працюєте з ним: cat file.txt | pbcopy
rtrigoso

3
Я знаю, що коментарю 5 років, але якщо хтось натрапляє на це в майбутньому, використовувати з командним висновком, зробітьgit merge-base master some-branch | pbcopy
Сем

62

Я створив інструмент для Linux / OSX / Cygwin, який подібний до деяких інших, але трохи унікальний. Я називаю це, cbі його можна знайти в цій суті github .

У цій суті я демонструю, як робити копіювання та вставлення за допомогою командної лінії за допомогою Linux, macOS та Cygwin.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

macOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Сігвін

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Примітка: Спочатку я просто мав намір згадати це у своєму коментарі до відповіді Боба Енопа . Але тоді я зрозумів, що мені слід додати README до своєї суті. Оскільки редактор gist не пропонує попереднього перегляду Markdown, я застосував тут відповідне поле і після копіювання / вклеювання його на свою суть подумав: "Я можу також надіслати відповідь".

cb

Трійник до буфера обміну

Цей сценарій моделюється після tee(див. man tee).

Це як звичайні команди для копіювання та вставки, але уніфіковані та здатні зрозуміти, коли ви хочете, щоб це було можливо

Приклади

Скопіювати

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Вставити

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

Прикування

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

Скопіюйте через переадресацію файлів

(хронологічно це мало сенс демонструвати це в кінці)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

Це прекрасно працювало для мене, щоб скопіювати вихід команди в буфер обміну в терміналі на macOS, дякую!
Джошуа Дайк

46

Я написав цей маленький сценарій, який виконує здогадки з команд копіювання / вставки.

Версія сценарію Linux покладається на те, що xclip вже встановлений у вашій системі. Сценарій називається буфер обміну.

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

Версія сценарію OS X покладається на pbcopy та pbpaste, які попередньо встановлені на всіх Macs.

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

Використовувати сценарій дуже просто, оскільки ви просто додаєте або вимикаєте, clipboardяк показано в цих двох прикладах.

$ cat file | clipboard

$ clipboard | less

3
Я використовую імена pbcopyта pbpasteв Linux, так що він працює як для Linux, так і для ОС X.
StackedCrooked

Щоб сценарій працював глобально в ubuntu: * Збережіть його на ~/.scripts/clipboard * Зробіть його виконуваним chmod +x ~/.scripts/clipboard для bash: * Додайте export PATH=$PATH:~/.scriptsдо кінця ~/.bashrc для fish: * Додати set PATH ~/.scripts $PATHдо ~/.config/fish/fish.config Якщо жодного з файлів чи папок вже не існує, просто створіть їх.
Хокей

2
Ви також можете зафіксувати цей сценарій як функцію clipboard(){ ... }і вставити його в .bashrc
Sebastian Nowak

Це дуже схоже на те, що я зробив, але я дозволяю прив'язувати подібне date | cb | tee -a updates.log. Це надішле dateкомандний висновок у буфер обміну та передасть його tee -aкоманді, яка додає його до файлу та передасть його разом stdout. Але це як " трійник, що протікає в буфер обміну", тому що якщо ви просто зробите, date | cbви не отримаєте результатів. І, нарешті, це також робить cb > file.txt gist.github.com/RichardBronosky/…
Бруно Броноський,

Одне з пропозицій - зніміть символ нового рядка, щоб уникнути виконання команди для вставки (наприклад, якщо копіювання вставляє шлях). Я роблю це, змінюючи команду xclip -i -selection clipboardнаxargs echo -n | xclip -i -selection clipboard
Івайло Страндєв,

23

Додайте це до своїх ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Тепер кліп p вставляє і c копії кліпу - але ви також можете робити більш фантазійні речі:

clipp | sed 's/^/    /' | cclip

↑ відступає буфер обміну; добре підходить для сайтів без { }кнопки переповнення стека

Ви можете додати його, виконавши це:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc

Наведіть приклад використання, будь ласка
Ульф Аслак

7

Я використовую Parcellite і xselкопіюю останнє повідомлення з фіксації gitв мій менеджер буфера обміну (чомусь xclipне працює):

$ git log -1 --pretty=%B | xsel -i -b

7

Якщо ви не підключаєтесь до зовнішніх інструментів, якщо ви підключаєтесь до сервера перегляду SSH, це відносно проста команда:

З командного рядка Windows 7+:

ssh user@server cat /etc/passwd | clip

Це дозволить розмістити вміст віддаленого файлу у вашому локальному буфері обміну.

(Команда вимагає запустити Pageant для ключа, або він попросить вас ввести пароль.)


1
@AfshinMoazami, заголовок і саме питання є загальними, Тільки теги натякають на систему Unix, і моя відповідь охоплює випадок, коли ви намагаєтесь отримати дату від unix-сервера до машини Windows, що може бути корисним майбутнім читачам.
d.raev

1
Запропонований тому, що так, корисний адміністраторам Windows, які мають лише Powershell для локальної гри (хоча зараз LSW є функціональним, я можу впасти в баш безпосередньо з Powershell і робити свої * nixy речі звідти).
фліт

Його робота над DOS-підказкою, а також git bash на Windows 10, тобтоecho Hello World | clip

5

Для Mac це приклад способу копіювання (в буфер обміну) пасти (з буфера обміну) за допомогою командного рядка

Скопіюйте результат pwdкоманди у буфер обміну як

$ pwd | pbcopy

Використовуйте вміст у буфері обміну як

$ cd $(pbpaste)

3

Я зробив невеликий інструмент, що забезпечує подібну функціональність, не використовуючи xclip або xsel. stdoutкопіюється в буфер обміну і може бути знову вставлено в термінал. Подивитися:

https://sourceforge.net/projects/commandlinecopypaste/

Зауважте, що цьому інструменту не потрібен X-сеанс. Буфер обміну можна просто використовувати в терміналі, і його не потрібно вставляти Ctrl+Vабо клацати мишею миші в інші X-вікна.



2

Виходячи з попередніх публікацій, я закінчив наступне легке зваження псевдоніму, яке можна додати до .bashrc:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

Приклади:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29

1

Я родом з роздягли вниз KDE фону і не мають доступу до xclip, xselабо інші модні речі. У мене є TCSH Konsole, щоб погіршити справи.

Реквізити: qdbus klipper xargs bash

Створіть виконуваний файл bash foo.sh.

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

Примітка. Це має бути суттєвим, оскільки TCSH не підтримує багаторядкові аргументи.

Після цього псевдонім TCSH у .cshrc.

alias clipboard xargs -0 /path/to/foo

Пояснення:

xargs -0Труби stdin в єдиний аргумент. Цей аргумент передається Баш виконуваний файл , який посилає «копію в буфер обміну» запит на klipperвикористанні qdbus. Труба до /dev/null- не друкувати символу нового рядка, повернутого qdbusна консоль.

Приклад використання:

ls | clipboard

Це копіює вміст поточної папки у буфер обміну.

Примітка: працює лише як труба. Використовуйте виконуваний файл bash безпосередньо, якщо вам потрібно скопіювати аргумент.


1

Я зазвичай виконую цю команду, коли мені потрібно скопіювати ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v ніде.



0

Для тих, хто використовує bash, встановлений у своїй системі Windows (відомий як підсистема Windows для Linux (WSL)), спроба xclip призведе до помилки:

Error: Can't open display: (null)

Натомість, нагадайте, що підсистема Linux має доступ до виконуваних файлів Windows. Можна використовувати clip.exe, як

echo hello | clip.exe

що дозволяє використовувати команду paste (ctrl-v).


1
Зауважте, якщо xserver (наприклад, vcxsvr або xming) встановлений на Windows, дисплей вмикається і xclipboard працює, ви насправді можете використовувати xclip, здавалося б.
бітбайт

0

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

Часто мені здається корисним скопіювати вихід команди після її виконання, і я не хочу або не можу виконати команду ще раз.

Для цього сценарію ми можемо використовувати gdm або подібну утиліту миші та вибрати за допомогою миші. apt-get install gdmа потім або клацніть правою кнопкою миші або комбінації Cntrl + Shift + c і Cntrl + Shift + v для копіювання та вставки в терміналі

Або, що є для мене кращим методом (оскільки миша не може правильно вибрати в одній панелі, коли у вас є кілька панелей поруч і вам потрібно вибрати більше однієї лінії), використовуючи tmux, ми можемо скопіювати в буфер tmux за допомогою стандартного [, пробіл, перемістіться до вибору, введіть або ви можете вибрати блок коду. Крім того, це особливо корисно, коли ви знаходитесь в одній із смуг мультиплексора кліпу, наприклад tmux І вам потрібно вибрати купу тексту, але не номери рядків (мій інсталятор vim надає номери рядків)

Після цього ви можете скористатися командою:

tmux збереження-буфер - | xclip -i

Ви, звичайно, можете його псевдонімом до чогось, що вам подобається, або прив’язувати безпосередньо до файлу конфігурації tmux

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

Ура

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