防止 bash 脚本中出现“rm -rf /”的最佳实践

igo*_*024 8 linux bash rm

众所周知,env.variable 中的额外空间会导致 bash 脚本中的 / 目录被删除。

#!/bin/bash
...
rm -rf /$MYPATH
Run Code Online (Sandbox Code Playgroud)

如果 $MYPATH 包含像"dir""dir /"这样的值,它将导致"rm -rf / dir""rm -rf dir /"。并会导致“rm -rf /”

是否有任何最佳做法可以防止这种情况?

jan*_*neb 12

别名 rm='rm --preserve-root'

IIRC --preserve-root 是较新版本的 coreutils 中的默认设置。

  • 在 Bash 中,除非您执行 `shopt -s expand_aliases`,否则不会在脚本内扩展别名。此外,别名`rm` 是一个坏主意 - 如果您依赖于别名行为而别名不存在怎么办?某些版本的 `rm` 可能没有 `--preserve-root`。 (4认同)

mar*_*ark 7

总是引用你的论点。即使您知道他们是理智的,在脚本中引用它们也几乎没有什么坏处。

rm -rf "/$FOO"如果 $FOO 有前导空格,则不会删除 / ,而是不会删除任何内容。这确实需要引号出现在带有 的行上rm -rf,当然,不是这样的:

TODEL="/$FOO"
rm -rf $TODEL
Run Code Online (Sandbox Code Playgroud)

如果你做的是,你会回来的麻烦整个负载。

另外,我倾向于认为一个好人:

if [ -d "/$FOO" ] ; then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

(或者-e如果它只是一个文件)在删除任何东西之前总是一个好主意。