如何嵌套$(var)命令替换?Bash创建带日期临时文件失败求解
问题分析与解决
你的命令执行失败是因为mktemp的使用不符合要求:它需要路径中包含至少3个连续的X作为随机占位符来生成唯一文件名,而你当前的命令没有这个占位符,导致mktemp执行失败,文件无法生成。
根据你的需求,分两种场景处理:
场景1:仅需固定日期命名的日志文件
如果不需要避免同名文件冲突(比如每天只生成一个日志文件),不需要使用mktemp,直接赋值并确保文件存在即可:
# 生成带日期的日志文件路径 LOGFILE="/folder/program_log.$(date +'%Y%m%d')" # 确保文件存在(如果文件已存在则不会修改内容) touch "$LOGFILE"
执行后LOGFILE变量的值就是你期望的/folder/program_log.20230718。
场景2:需要日期前缀+随机后缀的唯一文件
如果要避免同名冲突(比如一天内可能生成多个日志文件),给mktemp添加随机占位符XXXXXX:
# 生成带日期和随机后缀的唯一文件 LOGFILE=$(/bin/mktemp "/folder/program_log.$(date +'%Y%m%d').XXXXXX")
执行后LOGFILE会保存类似/folder/program_log.20230718.ZsT456的路径。
额外注意事项
- 确保
/folder目录存在且有读写权限,若目录不存在,先执行:mkdir -p /folder - 变量赋值时建议用双引号包裹路径,避免路径中出现特殊字符导致错误。
内容的提问来源于stack exchange,提问作者Mm-Art-In
相关产品推荐
相关产品推荐

