Mac OS下编写创建带日期Markdown文件的Shell脚本date报错如何解决?
问题原因
你遇到的报错是因为 macOS 自带的 date 工具为 BSD 版本,与 Linux 常用的 GNU date 语法不兼容,你脚本中使用的 -d 相对日期解析语法在 BSD date 下不支持,因此会反复输出 date 用法提示。
完整修改后脚本
#!/bin/bash # 读取原始标题用于 front matter 填充 echo "请输入博客文章标题:" read RAW_TITLE # 把标题中的空格替换为连字符,生成文件名用的标题格式 TITLE=${RAW_TITLE// /-} # 生成未来9个周一的日期列表(适配 macOS BSD date 语法) echo "可选的未来9个周一日期如下:" declare -a monday_dates for ((i=0; i<9; i++)) do # 计算第i个周一的日期,指定输出格式为 YYYY-MM-DD current_monday=$(date -v +$((i*7))d -v +monday +%Y-%m-%d) monday_dates+=("$current_monday") echo "$((i+1)). $current_monday done # 提示用户选择目标日期 echo "请输入目标日期对应的序号:" read select_index # 输入合法性校验 if ! [[ $select_index =~ ^[1-9]$ ]]; then echo "输入不合法,请输入1-9之间的数字" exit 1 fi selected_date=${monday_dates[$((select_index-1))]} # 拼接生成文件名 FILENAME="${selected_date}-${TITLE}.md" # 写入预填充的 front matter 内容 cat > "$FILENAME" <<EOF --- layout: title: ${RAW_TITLE} description: --- EOF # 自动调用 vim 打开生成的文件 vim "$FILENAME"
功能说明
- 适配 macOS 系统的 date 语法,不会再输出 date 命令错误提示
- 自动保留原始带空格的标题写入文件头的
title字段,文件名使用连字符格式符合命名规范 - 生成9个未来周一日期供选择,自带输入合法性校验
- 自动生成符合命名规则的markdown文件并自动唤起vim进入编辑状态
内容的提问来源于stack exchange,提问作者Gallo Cochino
相关产品推荐
相关产品推荐

