「noclobber」を設定すると欠点がありますか?

「noclobber」を設定すると欠点がありますか?

zsh与えられたコマンドですべてのファイルを削除できると仮定すると:

>*

noclobberこのオプションを設定するのが良いと思います。

>| filebashとzshでデフォルトの破壊動作を使用するには、いつでも使用できます。 (zshは代替構文も受け入れます>!file)。

noclobberPOSIX互換性のため、デフォルトでは設定されていないようですが、次の点を確認してください。

設定に欠点がありますかnoclobber

noclobber対話型シェルにのみこれを設定する方法はありますか?

ベストアンサー1

noclobberデフォルト値を設定しない理由は伝統によるものです。ユーザーインターフェイス設計の問題として、「この新しいファイルの作成」を簡単なタスクにし、「新しいファイルの作成または既存のファイルを上書きする」よりも危険なタスクに対する追加の障壁を作成することをお勧めします。したがって、noclobber良いアイデアです(>新しいファイルの作成、>|既存のファイルの上書きが可能)。シェルが数十年後に設計された場合、おそらくデフォルト値になります。

インタラクティブシェル起動ファイルに次の(.bashrcまたは)を使用することをお勧めします.zshrc

set -o noclobber
alias cp='cp -i'
alias mv='mv -i'

それぞれの場合(リダイレクト、コピー、移動)の目的は、既存のデータを消去することがジョブの基本的な目標ではない場合でも、ジョブが既存のデータを消去する副作用がある可能性がある場合に追加の障害を追加することです。rm -iデータの削除があるため、このリストには含まれていませんrm

ご了承くださいnoclobber-iセーフティネット。トリガーされると、どうしたの?。したがって、あなたが扱っている内容を確認しないための言い訳として使用しないでください!要点は、出力ファイルが存在しないことを確認する必要があることです。file exists: fooまたはという言葉を聞いた場合、overwrite 'foo'?これは間違いをしたという意味なので、気分が悪く、さらに注意しなければならないという意味です。特に、プロンプトが上書きされているかどうかを伝える習慣を持たないでくださいy(エイリアスは必要ですalias cp='yes n | cp -i' mv='yes n | mv -i'が、Ctrl+を押すとC出力が良く見えます)。本当に上書きするには、コマンドをキャンセルして出力を移動または削除します。ファイルを削除してもう一度やり直してください。このコマンドを実行してください。

また、これらのセキュリティ対策を実行する習慣を持たないことも重要です。これは、いつか構成されていないコンピュータを使用し、依存していた保護を損ない、データを失うことになるからです。もう効果的ではありません。そこに。

noclobberインタラクティブシェルからのみ読み取ること.bashrcができるため、インタラクティブシェルにのみ設定されます。.zshrcもちろん、スクリプトに影響を与えるようにシェルオプションを変更しないでください。スクリプトが破損する可能性があるためです。

おすすめ記事