エラーがどこで発生したのかわかりません。 Makefileコードは次のとおりです。
platform_id = $$( uname -s )
platform = $$( \
case $(platform_id) in \
Linux | FreeBSD | OpenBSD | NetBSD ) echo $(platform_id) ;; \
* ) echo Unrecognized ;; \
esac )
Makefileの最初のターゲットは次のとおりです。
check:
echo $(platform); echo
Linux Mint 19.0とFreeBSD 11.2の両方で問題なく実行され、make
GNUとBSDでテストされていますmake
。私の言葉は両方のシステムにgmake
、とがあるという意味ですbmake
。
私はOpenBSD 6.4を初めて使用していますが、エラーの原因を見つけることができなかったので苦労しています。
このコマンドのエラーメッセージは次のとおりです。
echo $( case $( uname -s ) in Linux | FreeBSD | OpenBSD | NetBSD ) echo $( uname -s ) ;; * ) echo Unrecognized ;; esac ); echo
/bin/sh: syntax error: ';;' unexpected
*** Error 1 in /root (Makefile:47 'check')
ゲストアドインをインストールしていないため、コピーする必要がありますが、2回確認すると正確でなければなりません。
ベストアンサー1
使用中のシェルパーサーが破損しています...
背景:解析が$(command)
正しく機能するには、再帰解析が必要です。
完全な式は$(command)
単一の文字列でなければならず、command
非常に複雑です。コマンドの終わりを見つけるために、最新のシェルはパーサーを再帰的に呼び出し、最初の冗長構文で停止するようにします)
。mksh
その後、バイナリ構文ツリーは、再帰パーサーが読み取った文字をバッファーに混在させながらコマンドにbosh
戻ります。ksh93
(
POSIX(実際にksh88)は、時にはこれがケースラベルの前に)
追加された要件を計算して追加する単純な文字列パーサーで使用できると信じています。(
あなたのコマンドがPOSIXで見なされているものと一致しないので、以下を変更して再試行することができます。
Linux | FreeBSD | OpenBSD | NetBSD ) echo $(platform_id) ;; \
入力する:
( Linux | FreeBSD | OpenBSD | NetBSD ) echo $(platform_id) ;; \
そして
* ) echo Unrecognized ;; \
入力する
( * ) echo Unrecognized ;; \
シェルがそのような生のカウントパーサーを使用している場合は、変更を受け入れることができるはずです。