【问题标题】:MSYS2 bash falls when substitution with pipe inside the loop当用循环内的管道替换时,MSYS2 bash 下降
【发布时间】:2018-04-25 05:25:00
【问题描述】:

我尝试在 MSYS2 x64 和 Cygwin64 bash 中、在控制台中和 /bin/sh 脚本中执行的下一个命令。

for a in 0; do
    echo b=$(echo "c-d" | tr - _)
done

获取输出:b=
当预期:b=c_d

还有带有 STATUS_STACK_OVERFLOW 异常的 sh.exe.stackdump 文件。 这仅发生在循环内,带有替换和管道,以及行上的任何操作:tr、grep、sed。 Bash 版本 4.4.12(最新版本)。

它是 ffmpeg 配置脚本的更改部分,解析选项,之前在同一个 Cygwin 构建中运行时没有错误。

原来的脚本是

for opt do
    case "$opt" in
        #...
        --enable-?*|--disable-?*)
            eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
            #...
        ;;
        #...
     esac
done

有没有办法用 bash 选项解决这个问题?

【问题讨论】:

  • 你说你是作为/bin/sh 脚本运行的?你试过/bin/bash 脚本吗? [社帮#!/bin/bash]
  • 是的,我遇到了同样的异常
  • 您是否可以提供 ffmpeg 脚本的“原始部分”以及“修改后的部分”?或者在它运作良好之前有什么以及你为了得到这个而改变了什么?
  • 其他包的组成发生了变化。
  • 更新了 Windows 10?

标签: bash shell cygwin msys2


【解决方案1】:

Maybe - 作为一个选项 try-- 指定选项的结尾:

tr -- - _

【讨论】:

  • 这只是一个例子。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2014-06-07
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
相关资源
最近更新 更多