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 "$@" 命令,这真的很奇怪。这似乎是一个无限循环,我想知道这个循环是如何发生的。另外,我知道存在将 cp 命令转换为移动到垃圾命令(例如 rmtrash)的解决方案,尽管我更喜欢 bash 脚本方法。

答案1

注意:unset 命令不会删除别名。

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

alias rm='move_to_trash'

如果我想删除文件或目录,此代码对我有用。

相关内容