Tente usar arrays para suas exclusões e expanda-as em - exclude-dir
e --exclude
options.
por exemplo. no seu script ~/.codesearch_config
(presumivelmente isso é originado pelo seu script principal?):
#! /bin/bash
# temporary array variables
declare -a __exclude_directories
declare -a __exclude_files
if [[ "$PWD" == "$HOME/project"* ]]; then
__exclude_directories=(.git build tmp)
__exclude_files=(translations)
elif [[ "$PWD" == "/some/where/else" ]]; then
__exclude_directories=(foo bar)
__exclude_files=(abc.txt def.txt xyz.txt)
fi
exclude_directories=''
exclude_files=''
for i in "${__exclude_directories[@]}" ; do
exclude_directories+=" --exclude-dir '$i'"
done
for i in "${__exclude_files[@]}" ; do
exclude_files+=" --exclude '$i'"
done
unset __exclude_directories
unset __exclude_files
# comment out or delete the next two lines after you've verified
# that the output is correct.
echo $exclude_directories
echo $exclude_files
Mais tarde, você os usaria assim:
out=$(grep -TInr$C$W --color=always \
$exclude_files \
$exclude_directories \
"$SEARCH")
Observação: não há cotações em torno das variáveis $exclude_*
aqui, caso contrário, elas serão tratadas como um argumento único cada, em vez de vários argumentos --exclude
e --exclude-dir
. Essa é uma das poucas situações em que você não deseja e não deve citar duas vezes suas variáveis (ou seja, quando estiver construindo uma linha de comando em uma variável ou variáveis).
Em quase todos os outros casos, você deve, por uma questão de hábito profundamente enraizado, citar duas vezes suas variáveis.