Bashrcを編集できるようにするエイリアスを(便宜上)追加したいと思います。変更が加えられた場合はソースを作成しますが、変更が行われなかった場合はソースを作成しないでください(気が変わった場合)。
最初はalias vb='vi ~/.bashrc && source ~/.bashrc'
を試しましたが、vi :q
または:q!
を終了しただけでも、おそらく成功した戻り値が返されるため、ソースが残っていることに気付きました。
ファイルに変更を加えずにviを終了しても、.bashrcがソースされないようにエイリアスを作成する方法はありますが、何かが変更された場合はソースになりますか?
どうですか:
alias vb='SUM1=$(md5sum ~/.bashrc) && vi ~/.bashrc && SUM2=$(md5sum ~/.bashrc) && if [ "$SUM1" != "$SUM2" ] ; then source ~/.bashrc ; fi'
エイリアスの代わりにbash関数を使用するのはどうですか?私のテストでは、次のように機能します。
プロンプトで〜/ .bashrcタイプbashmod
を変更する場合
function bashmod () {
pre=$(shasum ~/.bashrc);
vim mybuf;
post=$(shasum ~/.bashrc);
if [ "$pre" = "$post" ]; then
echo "~/.bashrc unchanged";
else
. ~/.bashrc;
fi
}
他の回答と同じ考えですが、チェックサムを介して迂回するのではなく、ファイルを直接比較します。
vb() {
local old="$(<~/.bashrc)"
vim ~/.bashrc
if ! cmp -s ~/.bashrc <<< "$old"; then
source ~/.bashrc
fi
}