Як я можу передати висновок команди в буфер обміну і вставити його назад під час використання терміналу? Наприклад:
cat file | clipboard
apt install xclip
іcat file | xclip -sel clip
Як я можу передати висновок команди в буфер обміну і вставити його назад під час використання терміналу? Наприклад:
cat file | clipboard
apt install xclip
іcat file | xclip -sel clip
Відповіді:
Я завжди хотів це зробити і знаходив приємний і простий спосіб зробити це. Я записав повну процедуру на випадок, якщо хтось потребує цього.
Спочатку встановіть програму на 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
alias "cs=xclip -selection clipboard"
та alias "vs=xclip -o -selection clipboard"
спростити копіювання / вставлення з буфера обміну системою
У OS X використовуйте pbcopy
; pbpaste
йде в зворотному напрямку.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Я створив інструмент для Linux / OSX / Cygwin, який подібний до деяких інших, але трохи унікальний. Я називаю це, cb
і його можна знайти в цій суті github .
У цій суті я демонструю, як робити копіювання та вставлення за допомогою командної лінії за допомогою Linux, macOS та Cygwin.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Примітка: Спочатку я просто мав намір згадати це у своєму коментарі до відповіді Боба Енопа . Але тоді я зрозумів, що мені слід додати README до своєї суті. Оскільки редактор gist не пропонує попереднього перегляду Markdown, я застосував тут відповідне поле і після копіювання / вклеювання його на свою суть подумав: "Я можу також надіслати відповідь".
Цей сценарій моделюється після 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
Я написав цей маленький сценарій, який виконує здогадки з команд копіювання / вставки.
Версія сценарію 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
pbcopy
та pbpaste
в Linux, так що він працює як для Linux, так і для ОС X.
~/.scripts/clipboard
* Зробіть його виконуваним chmod +x ~/.scripts/clipboard
для bash: * Додайте export PATH=$PATH:~/.scripts
до кінця ~/.bashrc
для fish: * Додати set PATH ~/.scripts $PATH
до ~/.config/fish/fish.config
Якщо жодного з файлів чи папок вже не існує, просто створіть їх.
clipboard(){ ... }
і вставити його в .bashrc
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
Додайте це до своїх ~/.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
Я використовую Parcellite і xsel
копіюю останнє повідомлення з фіксації git
в мій менеджер буфера обміну (чомусь xclip
не працює):
$ git log -1 --pretty=%B | xsel -i -b
Якщо ви не підключаєтесь до зовнішніх інструментів, якщо ви підключаєтесь до сервера перегляду SSH, це відносно проста команда:
З командного рядка Windows 7+:
ssh user@server cat /etc/passwd | clip
Це дозволить розмістити вміст віддаленого файлу у вашому локальному буфері обміну.
(Команда вимагає запустити Pageant для ключа, або він попросить вас ввести пароль.)
Я зробив невеликий інструмент, що забезпечує подібну функціональність, не використовуючи xclip або xsel. stdout
копіюється в буфер обміну і може бути знову вставлено в термінал. Подивитися:
https://sourceforge.net/projects/commandlinecopypaste/
Зауважте, що цьому інструменту не потрібен X-сеанс. Буфер обміну можна просто використовувати в терміналі, і його не потрібно вставляти Ctrl+Vабо клацати мишею миші в інші X-вікна.
Виходячи з попередніх публікацій, я закінчив наступне легке зваження псевдоніму, яке можна додати до .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
Я родом з роздягли вниз 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 безпосередньо, якщо вам потрібно скопіювати аргумент.
Я зазвичай виконую цю команду, коли мені потрібно скопіювати ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
ніде.
на Wayland xcopy, здається, не працює, замість цього використовуйте wl-буфер обміну . наприклад, на Fedora
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
Для тих, хто використовує bash, встановлений у своїй системі Windows (відомий як підсистема Windows для Linux (WSL)), спроба xclip призведе до помилки:
Error: Can't open display: (null)
Натомість, нагадайте, що підсистема Linux має доступ до виконуваних файлів Windows. Можна використовувати clip.exe, як
echo hello | clip.exe
що дозволяє використовувати команду paste (ctrl-v).
Просто для того, щоб висвітлити крайовий регістр :) і тому, що назва питання задає (принаймні зараз), як скопіювати вихід команди безпосередньо у буфер обміну.
Часто мені здається корисним скопіювати вихід команди після її виконання, і я не хочу або не можу виконати команду ще раз.
Для цього сценарію ми можемо використовувати gdm або подібну утиліту миші та вибрати за допомогою миші. apt-get install gdm
а потім або клацніть правою кнопкою миші або комбінації Cntrl + Shift + c і Cntrl + Shift + v для копіювання та вставки в терміналі
Або, що є для мене кращим методом (оскільки миша не може правильно вибрати в одній панелі, коли у вас є кілька панелей поруч і вам потрібно вибрати більше однієї лінії), використовуючи tmux, ми можемо скопіювати в буфер tmux за допомогою стандартного [, пробіл, перемістіться до вибору, введіть або ви можете вибрати блок коду. Крім того, це особливо корисно, коли ви знаходитесь в одній із смуг мультиплексора кліпу, наприклад tmux І вам потрібно вибрати купу тексту, але не номери рядків (мій інсталятор vim надає номери рядків)
Після цього ви можете скористатися командою:
tmux збереження-буфер - | xclip -i
Ви, звичайно, можете його псевдонімом до чогось, що вам подобається, або прив’язувати безпосередньо до файлу конфігурації tmux
Це лише для того, щоб дати вам концептуальну відповідь, щоб висвітлити цей крайній випадок, коли команду неможливо виконати ще раз. Якщо вам потрібні більш конкретні приклади коду, дайте мені знати
Ура