Quero criar uma função bash onde você possa localizar e substituir sed enquanto ignora os arquivos e pastas em .gitignore
. Também quero poder adicionar sinalizadores git grep ao comando. Por exemplo, para uma correspondência exata, devo poder adicionar -w
.
Isto é o que tenho até agora:
gs {
local grep_options=()
local search_pattern
local replacement
while [[ $1 =~ ^- ]]; do
grep_options+=("$1")
shift
done
search_pattern=$1
replacement=$2
git grep -l "${grep_options[@]}" "$search_pattern" | xargs sed -i "s/$search_pattern/$replacement/g"
}
gs pattern replacement
fará a pesquisa e substituição com sucesso. Mas gs -w pattern replacement
não fará nada.
Por que isso acontece e como consertar?
Você tem um erro de sintaxe na declaração da função.
Em vez de
você precisa:
Sempre passe seus scripts para https://shellcheck.net antes de pedir ajuda: