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'
このコードは、ファイルやディレクトリを削除したい場合に有効です。