在多个进程将其stdout管道化到单个进程中的情况下按ctrl-c将终止shell
我有一个脚本,它并行执行多个http请求,并允许用户搜索结果:在多个进程将其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
#!/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
}