编辑后,将其作为源 .bashrc 的别名?

编辑后,将其作为源 .bashrc 的别名?

我想添加一个别名(为了方便起见),以便我编辑我的 bashrc,如果进行了更改,则提供它,但如果未进行任何更改,则不提供它(以防我改变主意)。

我最初尝试过,alias vb='vi ~/.bashrc && source ~/.bashrc'但后来我意识到即使只是退出 vi:q:q!可能仍然会返回成功返回值,这就是它仍然可以提供的原因。

是否有某种方法可以创建一个别名,使得退出 vi 而不对文件进行任何更改不会获取 .bashrc,但如果发生了某些更改,则会获取?

答案1

关于什么:

alias vb='SUM1=$(md5sum ~/.bashrc) && vi ~/.bashrc && SUM2=$(md5sum ~/.bashrc) && if [ "$SUM1" != "$SUM2" ] ; then source ~/.bashrc ; fi'

答案2

那么使用 bash 函数代替别名怎么样?以下方法在我的测试中有效:

  • 将以下函数添加到 ~/.bashrc
  • 源 ~/.bashrc
  • 当你想bashmod在提示符下 更改 ~/.bashrc 类型时

    function bashmod () {
    
            pre=$(shasum ~/.bashrc);
            vim mybuf;
            post=$(shasum ~/.bashrc);
    
            if [ "$pre" = "$post" ]; then
                    echo "~/.bashrc unchanged";
            else
                    . ~/.bashrc;
            fi
    }
    

答案3

与其他答案的想法相同,但直接比较文件,而不是通过校验和绕道而行:

vb() {
    local old="$(<~/.bashrc)"
    vim ~/.bashrc
    if ! cmp -s ~/.bashrc <<< "$old"; then
        source ~/.bashrc
    fi
}

相关内容