zsh
与えられたコマンドですべてのファイルを削除できると仮定すると:
>*
noclobber
このオプションを設定するのが良いと思います。
>| file
bashとzshでデフォルトの破壊動作を使用するには、いつでも使用できます。 (zshは代替構文も受け入れます>!file
)。
noclobber
POSIX互換性のため、デフォルトでは設定されていないようですが、次の点を確認してください。
設定に欠点がありますか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
もちろん、スクリプトに影響を与えるようにシェルオプションを変更しないでください。スクリプトが破損する可能性があるためです。