Как скопировать результаты из команды grep в буфер обмена Bash?

Если я набираю что-то в терминале Linux bash без X, а затем использую Ctrl+u, все, что я набрал, сохраняется в "буфере обмена" bash (из-за отсутствия лучшего термина), и я могу набрать его снова, используя Ctrl + y,

Как я могу скопировать результаты из команды grep текстового файла в такой буфер обмена bash? Например, если у меня есть файл INSTALL, как это:

./installprocedure - do-some-long-and-complex-operation-on-dir dir1

Как я могу скопировать содержимое команды grep, чтобы она была доступна с помощью Ctrl + y? Например:

скопировать содержимое в буфер обмена bash "grep installprocedure INSTALL"  
Ctrl+ Y./installprocedure --do-some-long-and-complex-operation-on-dir dir1 #курсор доступен здесь

2 ответа

Решение

Насколько я знаю, нет прямого способа прокормить внутренний bash буфер, но если ваша цель состоит в том, чтобы строка в командной строке была в состоянии отредактировать ее, это можно сделать, используя два bash функции:

  1. Подстановка параметров (как упомянуто RedGrittyBrick) и

  2. readline функция shell-expand-line:

    shell-expand-line (MCE)

    Разверните строку, как это делает оболочка. Это выполняет расширение псевдонима и истории, а также все расширения слов оболочки.

Пример:

$ $(grep installprocedure INSTALL)Meta + Ctrl + E

Это заменит командную строку результатом подстановки команды.

Расширяя это, вы можете создать readline макрос, чтобы сделать это автоматически по любой произвольной команде, без необходимости заключать в backticks или $():

$ bind '"\C-xs": "\C-a$(\C-e)\e\C-e"'

Нажатие Ctrl+X с последующим s переместит курсор в начало строки (\C-a) буквально вставьте $(, переместиться в конец строки (\C-e) буквально вставьте )и, наконец, позвонить shell-expand-line (\e\C-e = Meta + Ctrl + e).

Другими словами, он заменит командную строку своим выводом.

Вы уверены, что не хотите редактировать историю команд? Или, может быть, подстановка команд?

История команд

В bash нажмите клавишу со стрелкой вверх, чтобы вызвать предыдущую команду. Вы можете редактировать строку обычным способом.

В качестве альтернативы вы можете обратиться к предыдущим командам и к частям предыдущих команд, используя запись с восклицательным знаком.

Использование вывода одной команды в качестве параметров для другой команды

 ./bar barparam `grep foo foofile`

Использование вывода одной команды в качестве ввода для другой команды

  grep foo foofile | ./bar barparam

Использование переменной оболочки в качестве именованного буфера обмена

  clipboard = `grep foo foofile`
  ./bar barparam $clipboard
Другие вопросы по тегам