Npm 为什么这个fish-while循环在一次迭代后终止?

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

这是一个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
        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