1

私はmakefileを作成しており、依存関係のないターゲットで作業しており、READMEという名前のファイルが現在のディレクトリに存在するかどうかを確認し、存在する場合は、lessを使用して読み取るか、完全に終了します。エラーは一切発生しません。 -この場合、ターゲットを実行するコマンドはコンソールに何も出力しないはずです。

私はいくつかの異なる方法を試しましたが、実際には何も機能していないようです(PAGERは単に以下に等しい変数です):

read :
   ifneq ("$(wildcard README)","")
      -@$(PAGER) README
   endif

そしてまたこのコードで

read :
   -@for file in *;\
   do \
       if [ ${file} == "README" ]; then\
           $(PAGER) "README" ;\
       fi;\
   done

最初のチャンクでは、/ bin / shに似たエラーが発生し続けます。構文エラー:予期しない単語( ")"を期待しています)そして、私の人生の間、それが言っていることを理解できません。確かに構文エラーはないと思います。おそらくmakeを誤用しています。

後者のコードでは、==に対して予期しない演算子エラーが発生します。

また、これら2つのシングルライナーソリューションのような単純なものも試しましたが、同様のエラーが発生します。

-@test -a README && less README
-@[ -a README ] && less README

どんな助けでも大歓迎です。

編集:私はさらに掘り下げていて、何か有望で、シェルを/ bin / bash(SHELL:= / bin / bash)に明示的に設定しているのに、サイコロがないのを見ました。

4

2 に答える 2

1

シェルコードを別々の*.shファイルに抽出して、makefileでコマンドとして指定できるようにする必要があります(* .shファイルが実行可能であることを確認してください)。

于 2012-04-20T06:14:37.930 に答える
1
read:
        @if [ -e README ]; then less README; fi
于 2012-04-20T06:23:18.917 に答える