Makefile prevezme použitý shell zo svojej internej premennej SHELL (pozri sekcia 5.3.2 v dokumentácii GNU Make). Štandardná hodnota je /bin/sh.
Premennú môžeme zmeniť klasickým spôsobom:
export SHELL = /bin/bash
.PHONY: all
all:
echo ${SHELL}
Použitie klauzuly export je nutné, pretože bez neho sa premenná neexportuje do externých skriptov, ani do sub-makeov.
Načo vlastne predefinovávať?
Nápad zmeniť shell je málokedy dobrý. Moderné distribúcie očakávajú, že skripty budú implementované v norme POSIX a nebudú používať žiadne špeciality bashizmy, ani konštrukcie zo zsh či nebodaj fish.
Skúška
Premenná sa však neexportuje do externých skriptov.
Vytvorme si skúšobný shellskript echoshell.sh:
#!/bin/sh
echo "$SHELL"
Dodajme target:
all:
echo ${SHELL}
./echoshell.sh
Ak spustíme make, vypíšu sa analogické shelly. To len vďaka tomu že premennú SHELL sme exportli! Ak by premennú len predefinovali – SHELL = /bin/bash, interný shellskript by si išiel svojou cestou a prevzal by premennú SHELL z prostredia.