запрос
Я использую Bash. Когда я ищу файлы, часто я делаю следующее:
find -name stackexchange.hs
И часто результаты будут выглядеть так:
/youre/the/man/now/dog/stackexchange.hs
/you/are/no/longer/the/dog/dog/stackexchange.hs
/this/is/the/file/i/want/stackexchange.hs
Тогда я хочу сделать одно из следующего:
- Вариант 1. Откройте последний элемент в списке результатов в vim .
- Вариант 2. Откройте элемент N в списке результатов в vim .
В настоящее время я вырезал и вставлял мышью. Что подводит меня к моему вопросу :
- Есть ли простой однострочный вариант для выполнения вариантов 1 и 2? Обратите внимание , что это происходит после того, как в
find
команде. - Есть ли способ захвата N-строк из стандартного вывода в некотором виде вектора / массива bash?
Идеальное использование
$ find -name am_i_really_all_alone.txt
./borges/library/you_are_not_alone.txt
./borges/library/am_i_really_all_alone.txt
$ vim (N)
(синтаксис и семантика могут отличаться, но вы понимаете, в чем дело)
Similaria
Кажется, есть несколько похожих вопросов. Вот мои предполагаемые различия (я открыт для просветления):
- «Open File Найдено с помощью функции поиска Команда» фокусируется на создании одной линии с трубой имя файла из
find
вvim
(или любой другой ). В моем случае я хочуfind
сначала, трубу позже (так сказать). Мой захват / использование происходит строго после . - «Повторное использование последнего вывода из Command Lind» выглядит чересчур, но, похоже, просто повторяет команду и не говорит о захвате N-й строки вывода. Откровенно говоря, это пугает меня.
- «Захват многострочного вывода Bash Builtin» близок, но не совсем там.
- «В чем разница между терминалом, оболочкой, tty, консолью и т. Д.» это действительно просто хорошее чтение.
Спасибо за помощь! Воспользовавшись * nix / BSD, когда я был подростком в 90-х годах, и испугался, позвонив своему соседу, утомленному кислотой, чтобы помочь мне установить драйверы для моей звуковой карты «подключи и работай», я с облегчением обсудил мелочи линии с (заметно) менее пугающими людьми. Приятно вернуться.
bash
command-line
aaronlevin
источник
источник
vim $(command |tail -n1)
.Ответы:
Вот потенциальное решение вашей проблемы, которое должно быть достаточно (но не идеально) безопасным при наличии нестандартных имен файлов (не обрабатывает имена файлов с переводами строк в них - возможно, это можно исправить, но могут быть и другие скрытые проблемы).
Две функции, первая из которых работает
find
с параметрами, которые вы передаете, сохраняет выходные данные в массив и отображает их. Второй - просто помощник для доступа к этому массиву.Случай использования:
Кавычки не обязательны,
$(myget index)
если в именах файлов нет пробелов или других проблемных символов.Переносит весь вывод
find
в вашу среду, которая может быть ограничена. (Использование временного файла вместо этого массива решило бы это, но имеет другие проблемы - особенно одновременное использование из нескольких оболочек.)источник
У меня есть это в моем
.screenrc
:Обычно на экране ¬1вставляет строку над курсором ¬2, вставляет вторую строку над курсором ... и так далее. Возможно, вы захотите добавить больше для строк 10 и выше, но я обнаружил, что уже после 7 я предпочел бы использовать мышь или
screen
режим копирования, чем подсчитывать количество строк, чтобы получить ту, которую я хочу.источник
Другое решение: вы можете написать интерактивный скрипт, который автоматически запросит ваш выбор. Вот код для интерактивного скрипта:
сохраните этот скрипт под любым именем, скажем «autofind», и вызовите скрипт с помощью «find command», в качестве аргумента здесь используется код для вызова скрипта:
Но перед использованием сценария проверьте свою команду «find», дает ли она результат или нет. Если он показывает какой-либо результат, используйте только сценарий.
источник
Ответ Матса был именно тем, что я искал. Я немного расширил его код, чтобы получить больше опций get.
,
источник