#!/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
答案 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