如何用Bash循环为Python脚本传入2012年每日日期参数?
别担心,这都是Bash新手常踩的小坑,我来帮你一步步修正!
先说说你原脚本里的几个问题:
- 变量赋值不能有空格:Bash里变量名、等号、值之间必须紧挨着,比如
day_start = 2012-01-01会被当成执行day_start命令,直接报错。正确写法是day_start=2012-01-01,同理day_end =$(...)要改成day_end=$(...)。 - date命令的日期递增格式:有些系统的date命令对
+ 1 day的空格敏感,更稳妥的写法是"$day_start +1 day"(去掉空格)或者"$day_start next day"。 - Python参数的空格陷阱:
--since ="$day_start"里等号前后的空格会让Bash把--since和="$day_start"拆成两个独立参数,Python脚本根本识别不了正确的参数值,必须改成--since="$day_start"(等号前后无空格)。
修正后的完整脚本:
#!/bin/bash day_start=2012-01-01 end_date=2013-01-01 while [ "$day_start" != "$end_date" ]; do # 计算次日的ISO格式日期 day_end=$(date -I -d "$day_start +1 day") # 执行Python脚本,参数格式要正确 python script.py --since="$day_start" --until="$day_end" # 更新起始日期为次日,进入下一轮循环 day_start="$day_end" echo "$day_start" done
额外补充:
如果你的系统是macOS,默认的date命令不支持-d和-I参数,需要先安装GNU版本的date:
brew install coreutils
然后把脚本里的date替换成gdate即可。
最后给脚本加执行权限,就能运行了:
chmod +x run_daily.sh ./run_daily.sh
内容的提问来源于stack exchange,提问作者Florestan
相关产品推荐
相关产品推荐

