У меня уже есть псевдоним для (более) быстрого поиска файлов:
alias f='find . -iname'
Я использую его так:
$ f *statis*
./main/statistics.py
./test/test_statistics.py
Теперь я хотел бы иметь другой псевдоним, который выполняет тот же поиск, но вместо распечатки найденных файлов открывает их в vim. В идеале это будет работать, когда будет найдено несколько файлов.
Я попытался (используя «echo» вместо «vim» для целей отладки):
alias fvi='find . -exec echo {} + -iname'
... но похоже, что -exec
отменяет -iname
, приходящий впоследствии:
$ fvi *statis*
./main/statistics.py ./main/probability.py ./test/test_statistics.py
./test/test_probability.py
Начиная с -exec {}
аргументы должны прибыть после -iname
(так как find
'выполняет' его аргументы слева направо), Вы не можете сделать то, что Вы хотите использовать псевдоним. Вместо этого позвольте своему псевдониму вызвать сценарий, содержащий, например:
#!/bin/sh
find . -iname "$1" -exec vi {} \;
Обратите внимание, что это вызовет vi
однажды для каждого файла найден. Если будет много таких файлов, то Вы будете делать многих :q!
или ZZ
выйти из них. Если Вы хотите вызвать один экземпляр vi
для редактирования всех найденных файлов изменитесь \;
к a +
:
find . -iname "$1" -exec vi {} +
С другой стороны, Вы могли использовать замену команды для обеспечения аргументов vi
:
vi $(find . -iname "$1") # do not use when file names may contain whitespace
Однако оборотная сторона к этому - то, что это перестанет работать на именах файлов, содержащих пробел.
Если Вы предпочитаете не создавать файл сценария для команды, вместо этого поместите оператор в функцию оболочки:
fvi () { find . -iname "$1" -exec vi {} + ; }
Если Вам действительно нужен псевдоним, чем Вы могли бы использовать этот ответ.
Псевдоним в bash
не принимает параметры. Поэтому Вам нужны функция и псевдоним и немного измененный find
команда:
Отредактируйте Ваш .bashrc
nano ~/.bashrc
и добавьте строки ниже в конце файла
myfvi() {
find . -type f -iname "$1" -exec vi -o {} +
}
alias fvi=myfvi
Перезагрузите конфигурацию или выход из системы и перевход в систему
source ~./bashrc
Запустите с
fvi '*statis*'
Но Вы могли также использовать функцию непосредственно
myfvi '*statis*'
Пример
У меня есть три файла в моей папке
$ ls -laog
total 4288
drwxrwxr-x 2 4329472 Sep 7 11:43 .
drwx------ 67 20480 Sep 7 11:28 ..
-rw-rw-r-- 1 0 Sep 7 11:43 bar
-rw-rw-r-- 1 4 Sep 7 11:23 foo
-rw-rw-r-- 1 4 Sep 7 11:23 foobar
И когда я использую псевдоним
fvi 'foo*'
vi
открывается двумя файлами.
, Поскольку несколько ответов указали, псевдонимы не поддерживают параметры путем, сценарии оболочки и функции делают. Вызов псевдонима составляет расширение псевдонима к его значению, затем выполняя получающуюся командную строку со всеми аргументами все еще на месте.
Никакая замена параметра не происходит. Если Вы хотите замену параметра, определяете функцию вместо псевдонима. Это так же, как много нажатий клавиш:
fvi () { find . -iname "$1" -exec vi {} + ; }
Однако, если Вы настаиваете, вот взлом для обращения к параметрам командной строки в расширении псевдонима: захватите их из истории оболочки. В Вашем случае это сделает задание:
alias fvi='find . -iname "$(history|tail -n1|sed -e "s/^.*\sfvi\s*//")" -exec vi {} + #'
вывод подоболочки, выполняющейся history | tail -n1 | sed -e "s/.*\sfvi\s*//"
, - то, что следует fvi
. Это соединено в эти find . -iname HERE -exec vi {} +
команда, которая является тем, в чем Вы нуждаетесь.
Кроме... существует то, что странный хеш подписывается в конце определения псевдонима. Я предоставляю читателю право выяснять разум d'ГЄtre для улыбки, которую приносит обнародование настоящего взлома. ;-)
uname -r
часть (с обратными галочками, как в моем ответе, но который can' t появляются в этом комментарии из-за неверного истолкования синтаксиса) получить корректное имя пакета. Но it' s также возможный, что у Вас просто есть различная проблема. Потребовалось бы намного больше информации для знания. Необходимо запустить собственный вопрос, если исправление пакета называет doesn' t добиваются цели. Также удостоверьтесь, что Ваши источники завершены и актуальны. – Hack-R 12 July 2017 в 06:49