在MinGW下,反引号内的管道失效

时间:2012-08-22 16:47:30

标签: bash mingw

当我尝试使用MinGW在Windows XP计算机上运行一些Bash脚本时,出现以下错误:

./autogen.sh: pipe error: No such file or directory

我已将问题本地化为Bash行,例如以下内容,其中有一个反引号内的管道:

__copyright="`grep Copyright ./autogen.sh | head -1`"

然而,不在反推内部的管道工作得很好:

grep Copyright ./autogen.sh | head -1

您期望的所有程序(sh,head,grep)都可以在命令行和Bash中快乐地运行。

我该怎么做才能解决此错误?没有它,我无法运行大多数Bash构建工具。

1 个答案:

答案 0 :(得分:1)

$ msysinfo | head -3
msysinfo-1.3: Send this to the MSYS support list:

MSYS 1.0.11(0.46/3/2) 2004-04-30 18:55 i686 unknown; targ=MINGW32

$ echo '__copyright="`grep Copyright ./autogen.sh | head -1`" && echo $__copyright' >test.sh

$ cat test.sh 
__copyright="`grep Copyright ./autogen.sh | head -1`" && echo $__copyright

$ sh test.sh
# Copyright 2005, 2006, 2007, 2008 by

对于这个测试,我从某个地方复制了autogen.sh,比如......随机... http://svn.ghostscript.com/ghostscript/tags/freetype-2.3.7/autogen.sh

这可能意味着您的问题需要更多信息。

但是......有时当我遇到snarly场景时,它可以帮助将破解代码包含在( )中。从技术上讲,你也不需要" "反引号,这会使某些用途变得复杂,但你的例子似乎没有问题。

我真的很想提出以下内容,因为它似乎完全没必要:

$ for item in `grep Copyright ./autogen.sh`;
  do
    __copyright="$__copyright $item";
  done;
  echo $__copyright

更奇怪的是,您的错误消息似乎意味着autogen.sh本身生成了错误,就好像autogen.sh正在贪图自己,所以我做了:

$ sh test.sh
__copyright="`grep Copyright ./test.sh | head -1`" && echo $__copyright

将test.sh修改为grep本身,甚至是有效的。

因此,这听起来像是一个排序问题而不是反击问题,你知道,首先是鸡还是鸡蛋?

autogen.sh试图阅读自己的版权评论吗?让评论作为数据的一种方法是将它们包装在这里的文件中:

_Copyright ()
{
  cat <<-END_OF_TEXT
# Copyright 2012, me
END_OF_TEXT
}

_Copyright