4

当我尝试使用 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 构建工具。

4

1 回答 1

2
$ 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

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

但是......有时当我遇到棘手的情况时,将破坏代码包含在( ). 从技术上讲,您也不需要" "反引号,这会使某些使用变得复杂,但是您的示例似乎没有问题。

我真的很讨厌提出以下建议,因为这似乎完全没有必要:

$ 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
于 2012-08-24T17:26:58.827 回答