`alias rm="rm -i"` は有害と考えられますか?

`alias rm="rm -i"` は有害と考えられますか?

以前、このような別名を使用するのはalias rm="rm -i"非常に悪いことだと読んだことがあります (出典が見つかりません)。

その事実には歴史的証拠や常識的な説明があるのでしょうか?

これにより、ユーザーは確認プロンプトに頼ってコマンドを確認するという悪い習慣を身に付けてしまい、エイリアスを持たない別のプロファイルで同じことを実行すると、大惨事につながる可能性があると考えられます。

答え1

あなたが正しい。

慣れてしまうと困ります。この機能がないシステムで、 を使用すると、rmすぐに削除が始まり、何が起こっているのか疑問に思うでしょう。

多くのユーザーはさまざまなシステムに SSH 接続することに慣れているため、個人用のユーザー アカウント (エイリアスを含む) を設定せずに、さまざまなシステムを使用することは一般的です。

代わりに、eg を使用してalias rmi='rm -i'、その使用方法を学習してください。別のシステムでそれが設定されていない場合は、誤ってファイルを削除したことにはならず、いつでも完全なコマンドを入力することができます。

答え2

@Daniel が言ったように、それ自体は害はありませんが、それが存在することを期待するように訓練することになります。実際、これは CentOS (およびおそらく RHEL も - 使用してから長い時間が経ちました) マシンのデフォルトのセットアップです。そしてそれはお尻にひどい痛みをもたらす残りの仕事中、私は「ルート アクセスを持つべきでない人のための Linux」セットアップを避けるために /bin/rm と入力しました。

答え3

大きな危険は、人々が glob をフィルタリングするためにこのようなものに頼る可能性があることだと思います。ディレクトリからいくつかの画像を削除したいが、すべてを削除したくないとします。

rm -i pics/*.jpg

これを使用して glob を手動でフィルター処理できます。これはまったく理にかなっています。ただし、エイリアスを付けて使用していて、rmそのエイリアスのないシェルにたまたまアクセスして試してみると、すべての写真が削除されてしまいます。おっと!

個人的には、この別名は血圧に悪影響を与えるとも思っています ;)。でも、それは私個人の意見です。

答え4

これは多くの過去に何百人ものユーザーと仕事をしてきた経験からすると、害は少ないです。

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • ユーザーは、ワイルドカードを正しく使用し、単に「*」を使用して、y/nプロンプトに頼ってファイルを選択するように訓練されています。
  • 正しいワイルドカードを使用するように設定することで、rmこの機能またはエイリアスが欠如している他のコンテキストで使用した場合に、災難から救われることがよくありましたrm -i
  • ユーザーが「y」を何度も入力したファイルの復元にかか​​る時間が短縮されました
  • ユーザーは一度だけ応答するだけで、使用に対する明確な肯定的なフィードバックを提供できます。
  • Control-c は作業を中断し、何もしないという報告がある
  • スクリプトではないので、実際の部分rmはそのままで、他のプログラムに影響はありません。

コードスタイルはshとほぼ互換性があります(echo .... | tr -d '\012'bash以前のシェルでの使用を除く)。bashに特化した独自のスタイルを作成してください。コード自体を共有するためではなく、ユーザー体験それに伴う変化。

関連情報