web-dev-qa-db-ja.com

編集後のソース.bashrcのエイリアス?

Bashrcを編集できるようにするエイリアスを(便宜上)追加したいと思います。変更が加えられた場合はソースを作成しますが、変更が行われなかった場合はソースを作成しないでください(気が変わった場合)。

最初はalias vb='vi ~/.bashrc && source ~/.bashrc'を試しましたが、vi :qまたは:q!を終了しただけでも、おそらく成功した戻り値が返されるため、ソースが残っていることに気付きました。

ファイルに変更を加えずにviを終了しても、.bashrcがソースされないようにエイリアスを作成する方法はありますが、何かが変更された場合はソースになりますか?

3
psycho9o

どうですか:

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

エイリアスの代わりにbash関数を使用するのはどうですか?私のテストでは、次のように機能します。

  • 次の関数を〜/ .bashrcに追加します
  • ソース〜/ .bashrc
  • プロンプトで〜/ .bashrcタイプbashmodを変更する場合

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

他の回答と同じ考えですが、チェックサムを介して迂回するのではなく、ファイルを直接比較します。

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