#!/usr/bin/env bash set -eu end="\033[0m" red="\033[0;31m" red() { echo -e "${red}${1}${end}"; } usage() { red "Missing argument $1.\n" cat < Arguments: REGEX_PATTERN Regular expression that "git grep" can search REPOSITORY_URL URL address that "git clone" can download the repository from Examples: Searching "make get-git" in cgit repository: git search 'make get-git' https://git.zx2c4.com/cgit/ git search 'make get-git' https://git.zx2c4.com/cgit/ -- \$(git rev-list --all) EOF exit 2 } REGEX_PATTERN="${1:-}" REPOSITORY_URL="${2:-}" [[ -z "${REGEX_PATTERN}" ]] && usage 'REGEX_PATTERN' [[ -z "${REPOSITORY_URL}" ]] && usage 'REPOSITORY_URL' mkdir -p /tmp/git-search DIRNAME="$(echo "${REPOSITORY_URL%/}" | rev | cut -d/ -f1 | rev)" if [[ ! -d "/tmp/git-search/${DIRNAME}" ]]; then git clone "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" fi pushd "/tmp/git-search/${DIRNAME}" shift 3 || shift 2 # when "--" is missing git grep "${REGEX_PATTERN}" "${@}"