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自体がエラーを生成したことを示唆しているように見えることです。

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

test.shをgrep自体に変更した後、それでも機能しました。

したがって、それはシーケンスの問題のように聞こえますが、バックティックの問題ではありません。鶏が先か卵が先か。

autogen.shは独自の著作権コメントを読み込もうとしていますか?コメントをデータとして機能させる1つの方法は、コメントをヒアドキュメントでラップすることです。

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

_Copyright
于 2012-08-24T17:26:58.827 に答える