在多个进程将其stdout管道化到单个进程中的情况下按ctrl-c将终止shell

在多个进程将其stdout管道化到单个进程中的情况下按ctrl-c将终止shell,shell,zsh,Shell,Zsh,我有一个脚本,它并行执行多个http请求,并允许用户搜索结果: #!/usr/bin/env zsh function swapiperson() { curl -sL "https://swapi.co/api/people/$1" | jq -r '.name' } function fzfpeople() { set -e person=$({for ((req=0;req<10;req++)); do swapiperson $req & d

我有一个脚本,它并行执行多个http请求,并允许用户搜索结果:

#!/usr/bin/env zsh

function swapiperson() {
  curl -sL "https://swapi.co/api/people/$1" |  jq -r '.name'
}

function fzfpeople() {
  set -e

  person=$({for ((req=0;req<10;req++)); do
    swapiperson $req &
  done} | fzf --no-hscroll +m)

  [ ${#person} -gt 0 ] && echo $person
}

运行
lesspeople
,按
ctrl-c
,shell退出。这向我表明,我运行并行请求并将它们全部管道化的方式存在一些问题。对于我所看到的问题,有什么简单的解决办法吗?我需要能够组合多个并行请求的
stdout
s,并将它们导入
fzf

解决方案非常简单。我只需要分别从
lesspeople
fzfoople
中删除
set-e
。以下是正确的工作代码列表:

fzfpeople.zsh

#!/usr/bin/env zsh

function swapiperson() {
  curl -sL "https://swapi.co/api/people/$1" |  jq -r '.name'
}

function fzfpeople() {
  person=$({for ((req=0;req<10;req++)); do
    swapiperson $req &
  done} | fzf --no-hscroll +m)

  [ ${#person} -gt 0 ] && echo $person
}
#!/usr/bin/env zsh

function swapiperson() {
  curl -sL "https://swapi.co/api/people/$1" |  jq -r '.name'
}

function lesspeople() {
  {for ((req=0;req<10;req++)); do
    swapiperson $req &
  done} | less
}

当您向脚本发送中断信号时,您希望发生什么?我只想回到shell。基本上我有一个搜索脚本,有时我想退出而不选择选项,但在同一个shell中继续使用其他命令。被杀掉的炮弹很烦人。
#!/usr/bin/env zsh

function swapiperson() {
  curl -sL "https://swapi.co/api/people/$1" |  jq -r '.name'
}

function lesspeople() {
  {for ((req=0;req<10;req++)); do
    swapiperson $req &
  done} | less
}