在rm -rf语句中使用环境变量是否不好?

| 关闭。这个问题是题外话。它当前不接受答案。
已邀请:
我不能真的说这是“不好的做法”,但是我会说,只要您在脚本中执行rm -rf指令,就会造成危险;) 通常,我要做的是创建一个名为/ tmp / todelete的目录,它们在我的脚本执行过程中将所有要删除的数据都存储在mt中,然后每隔几个小时通过cron作业擦除该目录。这样一来,如果出现问题,我就有时间在真正删除数据之前抓住它。
检查变量是否设置了值可能是个好主意(防御性编程) 例如
#!/bin/bash

#WEB=
WEB=/home/server/web

if [ -z \"${WEB+X}\" ]
then
  echo \"\\$WEB is unset\"
elif [ -z \"$WEB\" ]
then
  echo \"\\$WEB is set but empty\"
else
  echo \"The value of \\$WEB is $WEB\"
  rm -rf $WEB/*
fi
我认为作业实际上是(没有
$
):
WEB=/home/server/web
如果是在脚本中编写的,那么它不是环境变量;而是以任何适当的方式使用它都是完全合法的,包括
rm -fr $WEB/*
。 如果该分配不在脚本中,或者仅在脚本中为默认值,则这将更加危险,但是使用它仍然合法:
: ${WEB:=/home/server/web}

rm -fr $WEB/*
这意味着\'如果环境变量
$WEB
被设置为非空值,则使用它;否则使用值
/home/server/web
\'。应该检查此值
$WEB
,特别是如果
root
将运行脚本时。注意,尾随空白值为
$WEB
可能会造成意想不到的破坏。 但是,这变成了判断。我可能不会这样做;用于清除垃圾的环境变量很容易受到意外或故意的滥用。我可能需要将值作为参数传递给脚本。但是使用环境变量在形式上并没有错。这只是有点危险。如果您有良好的备份,它并不是那么危险,但是要注意环境中的10英镑!
通常,使用环境变量会有些危险,但是正如您所发现的那样,在某些地方它们会非常危险。另一个危险来源是,如果您忘记设置/检查变量,则其他程序可以在Shell中任意设置变量。 但是,您确实需要环境变量才能使用像bash这样的shell来执行操作。如果您可以在“危险”位置(
rm
chmod
chown
等)避开它们,那就更好了。总的来说,我认为最好的方法是在移动事物并使用诸如ѭ11之类的命令时要更加谨慎。

要回复问题请先登录注册