Bash Alias ​​с аргументами терпит неудачу - PullRequest
0 голосов
/ 23 июня 2011

Я запускаю следующую команду, чтобы искать текст в файлах и отображать симпатичный вывод:

$ grep -rnI "SEARCHTERM" . | sed 's/\:\s\+/\:\n/g'
./path/filename.php:LINENUMBER:
This line contains SEARCHTERM

Но когда я пытаюсь запустить его как псевдоним, я получаю ошибку:

$ alias lookfor="grep -rnI '\\!^' . | sed 's/\:\s\+/\:\n/g'"
$ lookfor SEARCHTERM
sed: can't read SEARCHTERM: No such file or directory

Есть мысли, почему мой псевдоним не работает?Я уверен, что это какая-то проблема цитирования ...

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Bash (досадно, IMHO) не поддерживает аргументы для псевдонимов.Вместо этого я бы предложил написать то, что вы хотите, в качестве функции (которая является гораздо более мощной):

lookfor() {
  grep -rnI '\\!^' "$@" | sed 's/\:\s\+/\:\n/g'
}

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

0 голосов
/ 23 июня 2011

В итоге я создал ~/bin folder и поместил в него исполняемый файл с именем lookfor со следующим содержимым:

#!/bin/sh
grep -rnI "$1" . | sed 's/\:\s\+/\:\n/g'

Папка ~/bin уже распознана моим дистрибутивом как находящаяся в PATH, но для тех, у кого это не установлено автоматически, вы можете добавить ее в вашу PATH, добавив следующее в ~/.bashrc:

if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi
...