回答:
GNU Makeのドキュメントから、
5.3.1 Choosing the Shell
------------------------
The program used as the shell is taken from the variable `SHELL'. If
this variable is not set in your makefile, the program `/bin/sh' is
used as the shell.
だからSHELL := /bin/bash
あなたのメイクファイルの一番上に置くと、あなたは行くのが良いはずです。
ところで、少なくともGNU Makeでは、これを1つのターゲットに対して行うことができます。各ターゲットには、次のように独自の変数を割り当てることができます。
all: a b
a:
@echo "a is $$0"
b: SHELL:=/bin/bash # HERE: this is setting the shell for b only
b:
@echo "b is $$0"
印刷されます:
a is /bin/sh
b is /bin/bash
詳細については、ドキュメントの「ターゲット固有の変数値」を参照してください。その行はMakefileのどこにでも行くことができ、ターゲットの直前である必要はありません。
man
。タイミングについて話します。:P
info
実際には、しかし、それはアンディを本当に助けたと思います。私はそのような日があったことを知っています...
SHELL=/bin/bash
、Makefileの最初の行(またはコメントの直後)を意味していました。
移植性が重要な場合は、Makefileの特定のシェルに依存したくない場合があります。すべての環境でbashを使用できるわけではありません。
SHELL変数をbashを指すように明示的に設定せずにこれを行う方法があります。SHELLは後続のmakefileに継承されず、環境から取得されないため、これは多くのmakefileがある場合に役立ちます。また、コードをコンパイルする人は誰でも、このようにシステムを構成する必要があります。
実行sudo dpkg-reconfigure dash
してプロンプトに「no」と応答すると、システムはデフォルトのシェルとしてダッシュを使用しません。次に、bashをポイントします(少なくともUbuntuでは)。ただし、システムシェルとしてダッシュを使用する方が少し効率的です。
sh
で呼び出されると、bashは互換モード(set -o posix
)で実行されます。OPが使用しようとしている機能であるプロセス置換は、このモードでは使用できません。
/bin/sh: -c: line 0: syntax error near unexpected token
( '`