Npm 为什么这个fish-while循环在一次迭代后终止?
这是一个fish函数,用于升级项目的JavaScript包。奇怪的是,它在一次迭代后终止,退出状态为0。为什么?Npm 为什么这个fish-while循环在一次迭代后终止?,npm,yarnpkg,fish,npm-run,Npm,Yarnpkg,Fish,Npm Run,这是一个fish函数,用于升级项目的JavaScript包。奇怪的是,它在一次迭代后终止,退出状态为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
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
鱼-版本
fish,3.0.2版
您正在运行fish 3.0.0,从点击-return
,而
实际上无法正确设置状态
但是,返回仍然会导致它终止while循环
升级到3.0.2。循环在一次迭代后终止,因为循环体中的纱线运行
调用阻塞了其余的stdin。(归功于)
一种可能的解决方法是将以下命令的stdin重定向到/dev/null
:
and yarn run test < /dev/null
and yarn run build < /dev/null
和纱线运行测试
罪魁祸首是包中的run-s
,这两个warn run
命令都会调用该包
谢谢,但我已经在运行fish 3.0.2了。用fish版本更新了这个问题。是那些warn
命令中的一个,还是git
命令,把stdin的其余部分弄脏了?@glennjackman你说得对。将循环体中的命令的stdin重定向到/dev/null可以修复它。您想添加您的评论作为答案吗?
and yarn run test < /dev/null
and yarn run build < /dev/null