1

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

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

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

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

copy content to bash clipboard "grep installprocedure INSTALL"  
Ctrl+y  
./installprocedure --do-some-long-and-complicated-operation-on-dir dir1 #cursor available here

2 ответа2

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

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

1

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

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

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

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

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

 ./bar barparam `grep foo foofile`

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

  grep foo foofile | ./bar barparam

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

  clipboard = `grep foo foofile`
  ./bar barparam $clipboard

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .