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