Мой ответ предлагает простую команду в трех разных синтаксисах, которые работают одинаково, но один немного короче и его легче набирать, чем второй. Третий вариант - это так называемый псевдоним, который означает, что вы можете назначить команде собственное имя и вызвать его, выполнив это без необходимости запоминать сложные вещи.
Приготовление:
Во-первых, установите пакет, xsel
который позволяет вам получить доступ к буферу обмена X из терминала:
sudo apt-get install xsel
Вариант команды 1 (короткий):
После этого вы можете набрать следующую строку, чтобы скопировать предыдущую команду в буфер обмена:
xsel -ib <<<!!:q
Если вы хотите скопировать вторую последнюю команду, замените !!
на !-2
, для третьего последнего использования !-3
и так далее.
Чтобы объяснить, что вы запускаете, вот краткий перечень команд:
xsel
инструмент командной строки для доступа к буферам обмена X
Для получения дополнительной информации, прочитайте справочную страницу онлайн или запустив man xsel
.
-i
Параметр указывает xsel
на чтение из стандартного ввода (обычно этот вход средства клавиатуры, но мы будем перенаправлять что - то здесь)
- В
-b
определяет параметр , чтобы использовать буфер обмена вместо «первичных» или «вторичные» выбор Икса.
<<<
это специальный синтаксис Bash под названием Here Here.
Он в основном расширяет (не оценивает!) Аргумент (только один!) После него и перенаправляет его в виде строки в стандартный ввод команды (до / после которого он стоит).
!!:q
называется «команда взрыва» для расширения истории в bash. Он заменяет собой любую ранее введенную командную строку.
Для получения дополнительной информации прочитайте ее местную справочную страницу, запустив ее man history
(онлайн-справка не помогает).
!!
Означает предыдущую командную строку и является синонимом !-1
.
Очевидно, !-2
означает, что вторая последняя командная строка. Не забывайте знак минус -
, иначе он вернет вторую (3-ю / ...) команду, которую вы когда-либо вводили.
- В
:q
модифицирует передает команду взрыва и говорит Баш заключить о замене в одинарные кавычки ( '
) , чтобы предотвратить дальнейшее расширение с помощью оболочки.
Вариант команды 2 (немного длиннее):
echo !!:q | xsel -ib
echo
имеет простую работу по выводу всех своих аргументов на стандартный вывод терминала.
!!:q
называется «команда взрыва» для расширения истории в bash. Он заменяет собой любую ранее введенную командную строку.
!!
Означает предыдущую командную строку и является синонимом !-1
. Очевидно, !-2
означает, что вторая последняя командная строка. Не забывайте знак минус -
, иначе он вернет вторую (3-ю / ...) команду, которую вы когда-либо вводили.
- В
:q
модифицирует передает команду взрыва и говорит Баш заключить о замене в одинарные кавычки ( '
) , чтобы предотвратить дальнейшее расширение с помощью оболочки.
|
это труба. Он перенаправляет вывод терминала ("stdout") команды перед ним на вход терминала ("stdin") команды после него.
xsel
инструмент командной строки для доступа к буферам обмена X
Для получения дополнительной информации, прочитайте справочную страницу онлайн или запустив man xsel
.
-i
Параметр указывает xsel
на чтение из стандартного ввода (обычно этот вход средства клавиатуры, но мы будем перенаправлять что - то здесь)
- В
-b
определяет параметр , чтобы использовать буфер обмена вместо «первичных» или «вторичные» выбор Икса.
Вариант команды 3 (псевдоним):
Псевдоним bash - это классная вещь, если вы не хотите запоминать длинные или сложные команды, которые вы часто используете. Вы можете назначить эту команду простому псевдониму, который вы можете запустить вместо длинной команды, чтобы добиться того же самого.
К сожалению, поскольку команды bang являются специальной функцией Bash и расширяются до разрешения псевдонимов, вы не можете просто использовать псевдоним одного из указанных выше вариантов, поскольку эта !!
часть не будет работать. Хотя есть обходной путь.
Чтобы установить псевдоним, запустите следующую строку в вашем терминале. Обратите внимание, что вы можете выбрать любое допустимое имя переменной Bash вместо copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Это, однако, только для вашего текущего сеанса Bash, что означает, что псевдоним исчезнет после закрытия окна терминала. Вы можете сделать это постоянным в каждой из ваших сессий Bash, добавив эту строку выше в конец вашего ~/.bashrc
файла или в свой ~/.bash_aliases
файл, если он у вас есть.
Опять же, короткий разрыв строки:
alias name='command'
это синтаксис для установки псевдонима в Bash. command
Будет выполняться всякий раз , когда вы выполняете name
с этого момента.
history -p \!\!
выводит ранее выполненную командную строку в стандартный вывод (стандартный вывод). Без -p
переключателя он не только печатает, но и запускает команду снова.
Обратите внимание, что нам нужно избегать bangs ( !
) с помощью обратной косой черты ( \
), потому что в противном случае bash расширит их, когда мы попытаемся установить псевдоним, что не имеет смысла, поскольку они должны быть в псевдониме, как есть.
Опять же, вы также можете указать [n] -ую недавнюю команду, заменив второй удар на -n
, например \!-2
.
|
это труба. Он перенаправляет стандартный вывод ("stdout") команды перед ним на стандарт терминала ("stdin") команды после него.
xsel
инструмент командной строки для доступа к буферам обмена X
Для получения дополнительной информации, прочитайте справочную страницу онлайн или запустив man xsel
.
-i
Параметр указывает xsel
на чтение из стандартного ввода (обычно этот вход средства клавиатуры, но мы будем перенаправлять что - то здесь)
- В
-b
определяет параметр , чтобы использовать буфер обмена вместо «первичных» или «вторичные» выбор Икса.
<<<"!!" xsel -ib
<<<
структура снова называется? И я думаю, что<<<!!:q xsel -ib
лучше (позволить команде взрыва истории сделать цитирование), или вы не согласны?!!:q
использует одинарные кавычки ('
) ...<<<"!!" xsel -ib
. Да,<<<!!:q xsel -ib
лучше, дерзай.xsel
интересный синтаксисВы можете использовать
xclip
:Итак, в вашем случае:
c
стоит для буфера обмена.Возможно, вам придется установить
xclip
сначала:РЕДАКТИРОВАТЬ:
Если вы просто хотите, чтобы введенная вами команда (а не вывод) была скопирована в буфер обмена, вы можете использовать строки Here:
Или труба
источник
echo "command" | xclip -selection clipboard
... Или сделать его сценарий под~/.bin
:echo "$@" | xclip -selection clipboard
. Допустим, вы сохранили его как «cpy», тогда вы можетеcpy youtube-dl stuff
скопировать его в буфер обмена без выполнения.echo "$@" | xclip -selection c && $@
или что-то более умное с eval ...Я только что сделал небольшой скрипт для
zsh
который использует ,xclip
чтобы сделать это:Этот скрипт копирует последнюю команду, которая была введена в оболочке / терминале, в системный буфер обмена. Это не будет работать на типичном удаленном сервере.
Я думал, что на написание этого сценария у меня уйдет всего пара минут, но на удивление потребовалось много времени, чтобы он заработал, когда я наткнулся на то, как
zsh
обрабатывается история.И
tail -n 2
первоеsed
в этом имеет дело с тем фактом, что команда для самого сценария записывается в историю, поэтому она получает две строки истории и удаляет последнюю.Этот скрипт работает, и это было довольно забавно, но мне действительно любопытно, есть ли более простой или более элегантный способ сделать это
zsh
.источник
tail
иsed
команды в одну или две команды. Те команды используют,!!
что объясняется здесь - это должно быть доступно в ZSH ....!!
действительно похоже, что это было бы полезно здесь, спасибо!Я использую как менеджер буфера обмена, так что.
Последняя команда в буфер обмена
Буфер обмена с нуля
ЗШ специфичный
Я думаю, что эти идеи могут помочь вам создать собственное решение
источник