从 /bin/sh -exc 诊断‘sh: 1: 错误替换’

从 /bin/sh -exc 诊断‘sh: 1: 错误替换’

我一直在尝试编译一些 ocaml 包并不断遇到一些形式为 sh: 1: Bad substitution(退出代码 2)的错误,例如。

/bin/sh -exc echo | m4
/bin/sh: 1: Bad substitution

但是,/bin/sh -ec echo | m4没有错误。似乎任何带有-e-x标志的命令都传递给/bin/sh(/bin/sh:指向 dash 的符号链接)都会导致此错误。这是预期的行为吗,因为我在手册中看不到任何与此相关的内容,而且我不记得以前发生过这种情况。

编辑:实际上我看到任何命令的错误/bin/sh -xc,无论-e

Ubuntu 18.04

答案1

我终于找到了问题所在。在我的 ~/.bashrc 中我设置了

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'

dash 手册中说,-x设置后,在每条跟踪线之前都会输出。PS4不使用 bashisms 导出可解决问题。

在这种情况下,我根本没指望我的~/.bashrc会被读取,但是由于bash它被用来执行,/bin/sh所以我认为那些变量也会被看到dash,这很烦人。

相关内容