这是一个用于升级项目JavaScript包的fish函数。奇怪的是,它在退出状态为0的单次迭代后终止。为什么?
function yarn-upgrade-all --description "Upgrade JavaScript packages"
yarn outdated | sed '1,/^Package/d;/^Done/d' | awk '{print $1, $4}' | while read -l PACKAGE VERSION
echo
set_color brwhite
echo -n "==>"
set_color yellow
echo -n " "$PACKAGE
set_color brblue
echo -n " "$VERSION
set_color brwhite
echo -n " <=="
set_color normal
echo
echo
yarn upgrade --latest $PACKAGE
and yarn run test
and yarn run build
and git commit -am "Upgrade to "$PACKAGE" "$VERSION
or begin
set_color red
echo "last command exited with status $status" >&2
set_color normal
return 1
end
end
end
另一方面,第二个函数(仅包含一个存根体)贯穿所有通过管道进入循环的包。
function yarn-upgrade-all-debug --description "Upgrade JavaScript packages"
yarn outdated | sed '1,/^Package/d;/^Done/d' | awk '{print $1, $4}' | while read -l PACKAGE VERSION
echo $PACKAGE $VERSION
end
end
鱼 - 逆转
fish, version 3.0.2
你正在运行鱼3.0.0,从https://github.com/fish-shell/fish-shell/issues/5513击中return
- while
实际上并没有正确设置状态。
然而,return
仍然使它终止while循环。
升级到3.0.2。
循环在单次迭代后终止,因为循环体中的yarn run
调用会使stdin的其余部分淹没。 (致@glenn-jackman的信用。)
可能的解决方法是将stdin重定向到/dev/null
以获取以下命令:
and yarn run test < /dev/null
and yarn run build < /dev/null
罪魁祸首是来自run-s
包的npm-run-all,由yarn run
命令调用。