我有一个脚本,该脚本使用3个echo命令将一些标头信息写入屏幕,然后应该删除先前创建的文件(确实存在)。该文件是6位文本文件,格式为ddmmyy。
#!/usr/bin/ksh
clear
echo "******************"
echo "Program name Version: " $VERSION_NUM
echo "******************"
#Set the tmp directory
export MY_TMP_DIR="$MYPATH/$USER/tmp_$(date +%y%m%d%H%M%S)"
在将来的脚本中:
rm -rf $MY_TMP_DIR
这些脚本由多个用户运行。它仅在99%的时间内删除temp目录,但在1%的执行中,由于$ MY_TMP_DIR格式错误,因此失败。
记录正在评估的命令后。结果变量的值包括3个echo命令输出。日志文件显示这是正在评估的字符串(带有换行符):
"rm -rf /pathToWorkingAera/User1/tmp_******************
Program name Version: 3.0.1
************
280220"
这会导致星号混乱(很明显),从而导致所有事物的删除。幸运的是,该系统受访问控制以限制损坏。
临时解决方法是更改echo命令中的星号,以使脚本安全地失败,并且rm -rf显然很危险,但这不是错误的根本原因。
有人可以建议如何通过分配“ date”命令输出来拾取回声输出吗?怎么预防呢?我无法解决它,因为我一开始不知道它是怎么发生的。
该问题是偶发性的,不可重复且并非特定于用户。
系统为RHEL7.7 bash。 (如果可能,将尝试根据要求提供更多详细信息。)