【发布时间】:2020-04-15 19:01:09
【问题描述】:
我正在尝试遍历一个日期范围,并将答案复制到 this 帖子上。
我的脚本'loop_run_local.sh':
d=2019-11-12
while [ "$d" != 2019-11-14 ]; do
echo 'Starting Data Extract...'
echo 'run date is: ' $d
echo 'Starting Transactions Extract...'
python3.7 flagship_ecom/run_transactions.py $d
d=$(date -I -d "$d + 1 day")
done
这似乎只适用于第一次迭代,不适用于后续日期,所以我猜有些东西不适用于d=$(date -I -d "$d + 1 day")?
在我按 ctrl+z 停止循环之前的终端输出:
bash-3.2$ ./flagship_ecom/loop_run_local.sh
Starting Data Extract...
run date is: 2019-11-12
Starting Transactions Extract...
pageToken is:0 : 2019-11-12
/Users/macuser/Library/Python/3.7/lib/python/site-packages/tqdm/std.py:658: FutureWarning: The Panel class is removed from pandas. Accessing it from the top-level namespace will also be removed in the next version
from pandas import Panel
Pandas Apply: 100%|██████████████████████████████████████████████████████████████████████████████| 2737/2737 [00:00<00:00, 3156.76it/s]
date: illegal option -- I
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Starting Data Extract...
run date is:
Starting Transactions Extract...
Traceback (most recent call last):
File "flagship_ecom/run_transactions.py", line 17, in <module>
start_date = sys.argv[1]
IndexError: list index out of range
date: illegal option -- I
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Starting Data Extract...
run date is:
Starting Transactions Extract...
Traceback (most recent call last):
File "flagship_ecom/run_transactions.py", line 17, in <module>
start_date = sys.argv[1]
IndexError: list index out of range
date: illegal option -- I
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Starting Data Extract...
run date is:
Starting Transactions Extract...
^Z
[2]+ Stopped ./flagship_ecom/loop_run_local.sh
输出中的这一行:
运行日期为:2019-11-12
对应于 .sh 脚本中的这一行:
echo 'run date is: ' $d
由于开始日期之后的日期为空白,我认为我的日期递增存在问题?
这是以 bash -x per cmets 为前缀时的输出:
bash-3.2$ bash -x ./flagship_ecom/loop_run_local.sh
+ d=2019-11-12
+ '[' 2019-11-12 '!=' 2019-11-14 ']'
+ echo 'Starting Data Extract...'
Starting Data Extract...
+ echo 'run date is: ' 2019-11-12
run date is: 2019-11-12
+ echo 'Starting Transactions Extract...'
Starting Transactions Extract...
+ python3.7 flagship_ecom/run_transactions.py 2019-11-12
pageToken is:0 : 2019-11-12
/Users/macuser/Library/Python/3.7/lib/python/site-packages/tqdm/std.py:658: FutureWarning: The Panel class is removed from pandas. Accessing it from the top-level namespace will also be removed in the next version
from pandas import Panel
Pandas Apply: 100%|██████████████████████████████████████████████████████████████████████████████| 2737/2737 [00:00<00:00, 2971.93it/s]
++ date -I -d '2019-11-12 + 1 day'
date: illegal option -- I
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
+ d=
+ '[' '' '!=' 2019-11-14 ']'
+ echo 'Starting Data Extract...'
Starting Data Extract...
+ echo 'run date is: '
run date is:
+ echo 'Starting Transactions Extract...'
Starting Transactions Extract...
+ python3.7 flagship_ecom/run_transactions.py
Traceback (most recent call last):
File "flagship_ecom/run_transactions.py", line 17, in <module>
start_date = sys.argv[1]
IndexError: list index out of range
^Z
[8]+ Stopped bash -x ./flagship_ecom/loop_run_local.sh
bash-3.2$
我使用的是 Mac。
【问题讨论】:
-
运行
bash -x yourscript以记录它运行的每个命令,因此我们不需要猜测值是什么。 -
另外,
date不是 bash 的一部分——它由您的操作系统供应商提供,因此我们需要知道您运行的是什么操作系统。 -
$d在第一次迭代后为空白,因为date命令出错,产生空白输出;illegal option -- I告诉我你没有在你引用的答案中使用相同版本的date,它看起来依赖于 GNUdate -
嗨,添加了上面使用 -x 调用的输出。另外,我在 Mac 上
-
如果您已经在使用 Python,您可以将外部循环移到您的 Python 代码中,这通常比 shell 脚本更好地处理日期。
标签: bash