配置bash以防止rm -rf *在没有警告的情况下运行〜/

时间:2017-11-11 00:42:26

标签: bash shell ubuntu

我正在运行最新的Ubuntu Linux。

今天早上我运行了一个做了很多事情的脚本。在做这些事情的时候,由于我还没有完成调查的原因,脚本回来了一个目录太多并做了一个 rm -rf * 在目录中 〜/ 显然不好;我花了3个小时恢复并重新配置所有内容。

问题:.bashrc中的一个函数看起来总是用户提示,即使是从没有用户输入的脚本,只要看到它 rm -rf~ / * 要么 rm -rf *在目录〜/

2 个答案:

答案 0 :(得分:3)

您可以在rm中添加自定义PATH,并将/bin/rm调用-i强制进入其参数数组作为最后一个选项,类似于(仅考虑POSIX标志):

#!/bin/sh -eu
if [ "$PWD" != "$HOME" ]; then 
    exec /bin/rm "$@"
    exit 127
fi
opts=
while getopts 'fiRr' opt; do
    case $opt in [fiRr]) opts=$opts$opt;; *) exit 1;; esac
done; 
shift $((OPTIND-1))
/bin/rm -${opts}i "$@" < /dev/tty

答案 1 :(得分:1)

提示是防止这种情况发生的弱方法。无论何时想要删除某些内容而不考虑太多,都很容易习惯于同时响应相同的响应。

实现可以从中恢复文件的各种垃圾桶要好得多。

您可以使用mv命令将rm别名为'trash-can',您可以在其中安排cron作业以定期清理此垃圾桶。

也许别名rm的内容如下:

#!/usr/bin/env sh
mvargs=()
i=0
for arg in "$@"
do
    case "$arg" in

            -r|-R)
                shift;;

            -rf|-Rf |-R|-fr|-fR)
                mvargs[$i]="-f"
                ((++i))
                shift;;

            *)

                mvargs[$i]="$arg"
                ((++i))
                shift;;
    esac
done

mv "${mvargs[@]}" "/tmp/trashcan"

/ tmp / trashcan可能是垃圾桶