Запрос псевдонима Bash - PullRequest
       16

Запрос псевдонима Bash

5 голосов
/ 26 ноября 2009

Как я могу превратить следующую команду в псевдоним bash?

find . -name '*.php' | xargs grep --color -n 'search term'

Где я могу указать расширение файла, а «поисковый термин» - это, очевидно, поисковый термин:)

Итак, что я хочу сделать, это:

 searchFiles 'php' 'search term'

Как передать ввод в псевдоним? Должен ли я просто создать скрипт bash и указать псевдоним для скрипта?

Ответы [ 4 ]

8 голосов
/ 26 ноября 2009

Как насчет использования функции? Добавьте это к вашему .bashrc:

function searchFiles() {
       find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2"
}

, а затем используйте его как:

$ searchFiles c включает

5 голосов
/ 26 ноября 2009

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

alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ -

Независимо от функции или псевдонима, я рекомендую использовать -print0 с find и -0 с xargs . Это обеспечивает более надежную обработку имен файлов (чаще всего пробелы в именах файлов).

1 голос
/ 10 марта 2010

Функции оболочки хороши, но вы также можете взглянуть на ack . Он обрабатывает поиск по конкретному файлу с цветовым кодированием, так что ваш пример будет просто

ack --php somepattern
1 голос
/ 26 ноября 2009

Пока функция работает, она не будет вызываться из других программ и скриптов (без особых усилий). (У псевдонима будет та же самая проблема.) Мой выбор был бы отдельным сценарием, так как кажется, что вы хотите вызвать его напрямую:

#!/bin/bash
# since you're already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)

INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .

(Не нужно искать с тем, что у вас есть.)

Если бы это использовалось только внутри другого скрипта, а не напрямую, функция была бы проще.

...