2017-07-25 12 views
1

私はGitはリセットするための確認を必要としたいので、私はこのようなWilliam Pursell's suggestion written hereを更新:これによりTAB完了時にgitが終了しないようにするには?

git() { 
set -e -u 
if [ $# -ge 2 ]; then 
    if [ "x$1" = "xreset" -a "x$2" = "x--hard" ]; then 
     echo "Are you sure? (Type 'yes')" 
     read resp || return $? 
     if [ "x$resp" = "xyes" ]; then 
      echo "Resetting" 
     else     
      echo "NOT Resetting" 
      return 0 
     fi 
    fi 
fi 
command git "[email protected]" || : 
} 

私は、コマンドの入力を間違えた場合は、コンソールから終了しないだろうが、私は使用しようとすると、それはまだ終了しますTAB補完。これを防ぐ方法はありますか?

+0

'set -e -u'は一般的に悪い考えです。 **特にここでは不適切ですが、他のケースでも同様です。 [BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)および[BashFAQ#112](http://mywiki.wooledge.org/BashFAQ/112)およびhttps:// wwwを参照してください。 .in-ulm.de /〜mascheck/various/set-e/ –

+0

BTW、 '[" resp "=" yes "]'は完全に正しいです。古くなった 'x $ resp'イディオムは絶対に必要ありません。 - それは[現代のPOSIX標準](http://pubs.opengroup.org/onlinepubs/)によって廃止された' test'の使用にのみ存在するあいまいさを修正します。 9699919799/utilities/test.html)(単一の呼び出しで複数の異なるテストを組み合わせる '-a'と' -o'を使用します;標準の文書では、これらの隣にある "OB"を書き留めてください)それらのコーナーケースのどれにも近くない。 –

答えて

1

set -e -uを削除します。これらの設定は、あなたの関数にとってローカルではなく、シェルセッションに対してグローバルであり、未定義変数(set -u)の影響を受けないシェル補完関数と競合します。あなたの機能はよく書かれているので、set -eset -uも必要ありません。

関連する問題