Как подавить этот sed в Bash?

#!/bin/bash
set_bash_profile()
{
    local bash_profile="$HOME/.profile"

    if [[ -w $bash_profile ]]; then
        if (grep 'MY_VAR' $bash_profile 2>&1); then
            sed -i '/MY_VAR/d' $bash_profile
        fi
        echo "export MY_VAR=foo" >>$bash_profile
    fi
}

set_bash_profile

Вот первый запуск:

bash-4.1$ ./set_bash.sh

Нет выхода - это здорово! И catшоу export MY_VAR=fooбыло приложено к файлу. Но, выполняя второй раз, я хочу sedтихо редактировать $bash_profileбез вывода строки соответствия, как это делается здесь:

bash-4.1$ ./set_bash.sh
export MY_VAR=foo

bash,

0

Ответов: 1


1 принят

Вы получаете выход из grepна grep 'MY_VAR' $bash_profile 2>&1. grep выводит согласованную строку в вашем профиле:

export MY_VAR=foo

по стандарту. В 2>&1только вперед стандартный вывод на стандартный вывод. Хорошо использовать -qопцию с grep. Также подоболочка (...)вокруг grep не нужна. Попробуй это:

#!/bin/bash
set_bash_profile()
{
    local bash_profile="$HOME/.profile"
    if [ -w $bash_profile ]; then
        if grep -q 'MY_VAR' $bash_profile; then
            sed -i '/MY_VAR/d' $bash_profile
        fi
        echo "export MY_VAR=foo" >>$bash_profile
    fi
}

set_bash_profile
Баш,
Похожие вопросы
Яндекс.Метрика