防止覆盖文件

时间:2015-11-20 04:48:40

标签: shell cygwin

我正在尝试在Cygwin上运行一个写

的脚本
alias vi=vim
export USER=esarpka
export DEVENVHOME=${DEVENVHOME:-/home/USER/CPM_WORKAREA/devenv.x}
. $DEVENVHOME/sourceme.sh
.bashrc中的

,同样将此内容写入.bash_profile

EDITOR=vim
export EDITOR
. [ -r /home/esarpka/.bashrc ] && . /home/USER/.bashrc

但剧本是:

echo "alias vi=vim" >> .bashrc 
echo export USER=$signumid >> .bashrc
echo 'export DEVENVHOME=${DEVENVHOME:-/home/'$signumid'/CPM_WORKAREA/devenv.x}' >> .bashrc
echo '. $DEVENVHOME/sourceme.sh' >> .bashrc 

echo "EDITOR=vim" >> .bash_profile
echo "export EDITOR" >> .bash_profile
echo ". [ -r $HOME/.bashrc ] && . $HOME/.bashrc" >> .bash_profile

但是当脚本再次运行时,它只会在.bashrc.bash_profile中添加一组行。我也尝试过使用

echo ". [ -r $HOME/.bashrc ] && . $HOME/.bashrc" > .bash_profile

例如,确保脚本被覆盖,而不是一次又一次地追加行。但是当以这种方式运行echo时,文件中只写入几行,文件变空。

2 个答案:

答案 0 :(得分:0)

>>运算符附加到文件。你应该使用>在第一个echo上创建文件。

一个易于维护和调试的解决方案是将master-bashrc存储在某处,然后简单地使用cp创建.bashrc,而不是使用echo语句。

答案 1 :(得分:0)

您可能应该查看您的测试是否已存在于文件中,并且仅在不存在时才添加它。您可以通过在文件中留下标记注释行来简化:

# Begin automatic modification
…lines as above…
# End automatic modification

然后您的编写脚本可以搜索字符串并决定是否添加材料(加上标记字符串):

marker="automatic modification"
if grep -q "^# Begin $marker" .bashrc
then
    {
    echo "# Begin $marker ($(date +'%Y-%m-%d %H:%M:%S'))"
    echo "alias vi=vim"
    echo export USER=$signumid
    echo 'export DEVENVHOME=${DEVENVHOME:-/home/'$signumid'/CPM_WORKAREA/devenv.x}'
    echo '. $DEVENVHOME/sourceme.sh'
    echo "# End $marker"
    } >> .bashrc
fi

如果您选择不使用标记,则可以或多或少地查找添加的行。

请注意,修改其他人.bash_profile.bashrc是一项敏感的业务(尽管您可以自己做自己喜欢的事情)。有些人 - 例如我,特别是 - 如果其他人坚持要修改他们的个人资料或其他启动文件,他们会非常沮丧。当然,我将我的关键配置文件(例如配置文件)保留在版本控制之下,这样我就可以更轻松地从这种滥用中恢复,但是对于我的启动文件,你不会受欢迎。