Synthétiser à partir des autres réponses: pushd
est spécifique à bash et vous faites en utilisant un autre shell POSIX. Il existe une solution de contournement simple pour utiliser un shell séparé pour la partie qui nécessite un répertoire différent, alors essayez simplement de le changer en:
test -z gen || mkdir -p gen \
&& ( cd $(CURRENT_DIRECTORY)/genscript > /dev/null \
&& perl genmakefile.pl \
&& mv Makefile ../gen/ ) \
&& echo "" > $(CURRENT_DIRECTORY)/gen/SvcGenLog
(J'ai remplacé le long chemin par une extension variable. J'en suis probablement un dans le makefile et il se développe clairement dans le répertoire courant).
Puisque vous l'exécutez à partir de make, je remplacerais probablement le test par une règle make, aussi. Juste
gen/SvcGenLog :
mkdir -p gen
cd genscript > /dev/null \
&& perl genmakefile.pl \
&& mv Makefile ../gen/ \
echo "" > gen/SvcGenLog
(a supprimé le préfixe de répertoire actuel; vous utilisiez de toute façon un chemin relatif à certains moments) Et que de simplement faire dépendre la règle gen/SvcGenLog
. Ce serait un peu plus lisible et vous pouvez le faire dépendre genscript/genmakefile.pl
aussi, donc le Makefile
in gen
sera régénéré si vous modifiez le script. Bien sûr, si quelque chose d'autre affecte le contenu de Makefile
, vous pouvez également faire en sorte que la règle en dépende.
pushd
. Est-ce que pushd est dans votre$PATH
?