2017-08-21 16 views
1

oh-my-zshを使用しています。bashとoh-my-zshのrm -fの動作が異なる

alias rm='rm -i' 

function clean_tex_mid_file() 
{ 
    rm -f *.dvi *.log *.synctex.gz *.aux 
} 
alias cleantex='clean_tex_mid_file' 

そして私は、私は上記で定義されcleantexを使用して存在しないファイルを削除しようとしたとき、それは-fオプションを無視して、'no matches found: *.dvi'よう訴えたことが判明:私はrmコマンドについて次の二つの別名を調達取得している両方。

さらに深いテストでは、bashは同じエイリアスファイルを取得していないファイルを削除しようとしていることを知らせます。

この問題をどのように処理し、何が起こったのですか?

+0

'RM -f'はこちら仕様に動作している - それは**はずの何かが存在しない場合**静かに成功します。 –

+1

密接に関連しています:[zshが拡張しようとする理由*とbashはありません](https://stackoverflow.com/questions/20037364/why-zsh-tries-to-expand-and-bash-does-not) –

+0

注別名を使って関数に簡単な名前を付けることは 'zsh'では必要ないということです。関数に複数の名前を付けることができます: 'clean_tex_mid_file cleantex(){...}'。しかし、最初に関数 'cleantex'の名前を付ける代わりに、複数の名前が必要な理由は明確ではありません。 – chepner

答えて

2

マッチしないglobでコマンドを実行すると、デフォルトでzshが失敗します。この動作は、POSIX sh標準に反する。

bashは、デフォルトでPOSIX標準に従います。これは、元のglob式を問題のアプリケーションに渡す必要があります。 rm -fは、そのファイルを正常に削除した場合と同じファイルがすでに存在しない場合を処理するために指定されているため、一致のないグロブ式は成功したケースとして扱われます。実行して、bashの上でこの動作を変更するには

# tell bash to abort a command rather than passing it an unexpanded glob 
shopt -s failglob 
関連する問題