如何在Bash中抑制此sed?

时间:2018-06-22 22:43:53

标签: 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

1 个答案:

答案 0 :(得分:1)

您从grep上的grep 'MY_VAR' $bash_profile 2>&1获得了输出。 grep在您的个人资料中输出匹配的行:

export MY_VAR=foo

在标准输出上。 2>&1仅将stderr转发到stdout。最好在grep中使用-q选项。同样,不需要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