Как насчет:
grep -q '^source ~/\.git-completion\.bash$' ~/.bash_profile || echo "source ~/.git-completion.bash" >> ~/.bash_profile
или в более явной (и читаемой) форме:
if ! grep -q '^source ~/\.git-completion\.bash$' ~/.bash_profile; then
echo "Updating" ~/.bash_profile
echo "source ~/.git-completion.bash" >> ~/.bash_profile
fi
РЕДАКТИРОВАТЬ:
Возможно, вам следует добавить дополнительную новую строкуперед вашей строкой, на всякий случай ~/.bash_profile
не заканчивается на один:
if ! grep -q '^source ~/\.git-completion\.bash$' ~/.bash_profile; then
echo "Updating" ~/.bash_profile
echo >> ~/.bash_profile
echo "source ~/.git-completion.bash" >> ~/.bash_profile
fi
РЕДАКТИРОВАТЬ 2:
Это немного проще изменить и немного более переносимо:
LINE='source ~/.git-completion.bash'
if ! grep -Fx "$LINE" ~/.bash_profile >/dev/null 2>/dev/null; then
echo "Updating" ~/.bash_profile
echo >> ~/.bash_profile
echo "$LINE" >> ~/.bash_profile
fi
Опции -F
и -x
определены POSIX и были предложены в нескольких других ответах и комментариях.