Вставка текста из предыдущего стандартного ввода в командную строку - PullRequest
2 голосов
/ 25 октября 2010

Я бы хотел настроить мой Bash таким образом, чтобы я мог извлекать текст из стандартного вывода предыдущей команды.Пример использования, который я буду использовать, - это разрешение конфликтов во время git rebase.

$ git status
# Not currently on any branch.
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified:      app/views/report/index.html.erb
#
$ vim app/views/report/index.html.erb
# .... edit, resolve conflicts ....
$ git add <Alt+.>

Проблема в том, что самый простой способ получить имя файла для 2-й команды (vim ...) - это переместить мою рукук мыши.Один из вариантов - screen, но он имеет свой собственный набор проблем в качестве повседневной оболочки.(Не последнее, что я использую и использую Ctrl + A в качестве ярлыка для чтения строки)

С чего мне начать делать эту работу для меня?В идеале я хотел бы иметь возможность извлечь строку N из стандартного вывода предыдущей команды, где я могу манипулировать ею как командой.

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Помимо использования мыши, я могу думать только о том, чтобы использовать grep, sed и / или awk, возможно, с tee и / или функцией Bash и подстановкой и / или процессомподстановка процесса и / или команды:

vim $(git status | tee /dev/tty | grep ...)

или

var=$(git status | tee /dev/tty | grep ...)
vim "$var"
git add "$var"

tee позволяет просматривать полный вывод при захвате измененного вывода.Создание функции позволит вам легко передать аргумент, который выберет определенную строку:

var=$(some_func 14)
etc.

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

1 голос
/ 25 октября 2010

Я не знаю хорошего, чистого решения, но в качестве хака вы можете попробовать команду script, которая регистрирует весь ввод и вывод в файл.Для GNU script:

$ script -f
Script started, file is typescript
$ ls -1
bar
baz
foo
typescript
$ echo $(tail -3 typescript | head -1)
foo
0 голосов
/ 25 октября 2010

труба выводит через седь:

git status | sed -n '5p'

чтобы получить 5-ю строку

...