Назад | Перейти на главную страницу

Упростите эту команду bash

Как избежать двойного ввода поискового запроса в этом однострочном (search for something)?

git grep "search for something" $(git log -g --pretty=format:%h -S"search for something")

Мое решение:

Создать скрипт bash /usr/local/bin/git-search:

search_string="$1"
git grep $search_string $(git log -g --pretty=format:%h -S$search_string)

Тогда я могу использовать:

git search 'search for something'

Вы можете поместить в файл следующее, а затем указать этот файл в своем ~/.bashrc:

function gitgrep {
    git grep "search for something" $(git log -g --pretty=format:%h -S"$1")
}

Чтобы получить его, у вас будет просто точка имени файла . file_with_function

Тогда вы бы:

gitgrep "foo bar baz" (Требуются цитаты, можно поиграть с $@ вместо того $1 если вы не хотите использовать кавычки)

Вы можете сделать это как псевдоним:

alias youralias="git grep \"$0\" $(git log -g --pretty=format:%h -S\"$0\")"

А затем вызовите его из оболочки, например

youralias "search for something"

Это работает для вас?

другой вариант - использовать расширение истории bash:

git grep "search for something" $(git log -g --pretty=format:%h -S!#:2)

Хотя все это будет работать, если вы также хотите сократить свои базовые команды для git, просто создайте файл в ~/.gitconfig и добавить псевдонимы. Например, вот некоторые из моих:

$ cat ~/.gitconfig
[alias]
   ci = commit
   co = checkout
   f = fetch
   s = status
   b = branch
   d = diff
   a = add
   l = log
   g = grep

Итак, теперь вы можете выдать следующее:

git g "search for something" $(git l -g --pretty=format:%h -S"search for something")

ИЛИ вы все еще можете иметь псевдонимы git в вашем файле .gitconfig, но также включать другие функции bash, псевдонимы и т. Д., Которые были предложены в этом потоке.