【问题标题】:Why does this fish while loop terminate after a single iteration?为什么这个鱼的while循环在一次迭代后终止?
【发布时间】:2019-09-09 02:54:25
【问题描述】:

这是一个用于为项目升级 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

鱼 --version

fish, version 3.0.2

【问题讨论】:

  • 这些yarn 命令或git 命令之一是否会占用标准输入的其余部分?
  • @glennjackman 你是对的。为循环体中的命令将标准输入重定向到 /dev/null 可以修复它。您想添加您的评论作为答案吗?

标签: npm yarnpkg fish npm-run


【解决方案1】:

您正在运行fish 3.0.0,并从while 中点击https://github.com/fish-shell/fish-shell/issues/5513 - return 实际上并没有正确设置状态。

但是,return 仍然会导致它终止 while 循环。

升级到 3.0.2。

【讨论】:

  • 谢谢,但我已经在运行 fish 3.0.2。用鱼版本更新了问题。
【解决方案2】:

循环在单次迭代后终止,因为循环体中的 yarn run 调用占用了标准输入的其余部分。 (归功于@glenn-jackman。)

一种可能的解决方法是将这些命令的标准输入重定向到/dev/null

        and yarn run test < /dev/null
        and yarn run build < /dev/null

罪魁祸首是来自npm-run-all 包的run-s,它被两个yarn run 命令调用。

https://github.com/mysticatea/npm-run-all/issues/166

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多