rmコマンドのエイリアス(cpコマンドの問題)

rmコマンドのエイリアス(cpコマンドの問題)

rmコマンドをファイルをバックアップし、後で削除するコマンドに変更してみました。

function move_to_trash () {
        unset rm;
        cp -v "$@" "/home/`whoami`/backup/" &&  rm "$@";
}


alias rm='move_to_trash'

出力:

'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'
'file1' -> '/home/dorchester/backup/file1'

cpコマンドはrm "$ @"コマンドを開始せずに実行されますが、これは本当に奇妙です。これは無限ループのようです。このループがどのように発生するのか知りたいです。また、私はbashスクリプトアプローチを好みますが、cpコマンドをガベージコマンド(rmtrashなど)に変換するソリューションがあることを知っています。

ベストアンサー1

注:unsetコマンドはエイリアスを削除しません。

function move_to_trash () {
        cp -vr "$@" "/home/`whoami`/backup/" && command rm -rf "$@";
}

alias rm='move_to_trash'

このコードは、ファイルやディレクトリを削除したい場合に有効です。

おすすめ記事