You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本exec创建带时间戳日志失败,目录不存在如何解决

问题分析与解决方法

核心问题解释

exec 重定向时会自动创建不存在的日志文件,但不会自动创建文件所在的上级目录。你遇到的报错是因为 $1/logs 这个目录不存在,导致无法在里面创建日志文件。

解决步骤

要解决这个问题,需要先确保日志目录存在,同时保证日志文件名的时间戳和实际创建文件的时间一致,具体操作如下:

  1. 预先生成带时间戳的日志文件名:先把日期时间变量存起来,避免创建目录前后时间戳不一致(比如差几秒)。
  2. 创建日志目录:用 mkdir -p 命令,它会自动创建多级目录,且目录已存在时不会报错。
  3. 执行重定向:用预先生成的文件名完成输出重定向。

修改后的脚本代码

#!/usr/bin/env bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3

# 预先生成带时间戳的日志文件名
log_filename=$(date '+%Y%m%d_%H%M%S')_start.log
log_dir="$1/logs"

# 创建日志目录(-p 参数确保多级目录都能创建,且目录存在时不报错)
mkdir -p "$log_dir"

# 执行输出重定向到指定日志文件
exec 1>"$log_dir/$log_filename" 2>&1

关键细节说明

  • mkdir -p "$log_dir":-p 是关键参数,比如如果 $1 是 /output,它会自动创建 /output/logs;如果 $1 是 /a/b/c,它会创建 /a/b/c/logs 整个路径。
  • 先存 log_filename:这样不管创建目录花了多久,日志文件名的时间戳都是脚本执行到这一行的时间,避免出现目录创建前后秒数变化的问题。

内容的提问来源于stack exchange,提问作者GKelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:25:52