我想添加一个别名(为了方便起见),以便我编辑我的 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
}