所以,我不确定这些命令是否真的很重要,但对于背景来说,这是我正在运行的命令:
aws s3 ls s3://REDACTED/ | jq -nR '[inputs | split(" +"; null).[3]] | reverse.[] | "bkt --ttl '1h' -- aws s3 cp s3://REDACTED/\(.) - | tac"' -r | bash | head
基本上,我想从所有对象的所有行中获取最后 10 行(按名称按字典顺序排列)。 为此,我列出了存储桶,然后反转它,然后构建一些命令以相反的顺序对它们进行分类,然后运行它们,然后用 head 限制输出。 对于那些不知道的人,
bkt
是一个为任何命令添加缓存的包装器...
当我运行时,我有点大了,它在前 10 行之后没有退出,事实上,它似乎仍在运行所有 aws cp 命令...
我的问题是为什么管道中的
bash
命令没有中止? SIGPIPE
退出后应该会得到head
,对吗?
我想我在写问题的时候就找到了答案......
我认为正在发生的事情是
aws
/bkt
命令实际上得到了 SIGPIPE
,而 bash
从未看到它,因为它只是粘在管道上......我的情况最简单的解决方法是将 bash
更改为 bash -e
以便子进程失败后退出...