管道命令在 head 退出后不会被终止

问题描述 投票:0回答:1

所以,我不确定这些命令是否真的很重要,但对于背景来说,这是我正在运行的命令:

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
,对吗?

bash jq aws-cli
1个回答
0
投票

我想我在写问题的时候就找到了答案......

我认为正在发生的事情是

aws
/
bkt
命令实际上得到了
SIGPIPE
,而
bash
从未看到它,因为它只是粘在管道上......我的情况最简单的解决方法是将
bash
更改为
bash -e
以便子进程失败后退出...

© www.soinside.com 2019 - 2024. All rights reserved.