Synthétiser à partir d'autres réponses: pushd
est bash spécifiques et vous faire est d'utiliser un autre shell POSIX. Il existe une solution simple pour utiliser des shell pour la partie qui doit répertoire différent, donc, juste essayez de la remplacer par:
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 avec une extension variable. J'ai probablement l'un est dans le makefile et s'étend dans le répertoire courant).
Puisque vous l'exécutez à partir de la, je serais probablement remplacer le test avec une règle, trop. Juste
gen/SvcGenLog :
mkdir -p gen
cd genscript > /dev/null \
&& perl genmakefile.pl \
&& mv Makefile ../gen/ \
echo "" > gen/SvcGenLog
(a abandonné le répertoire courant préfixe; vous avez été à l'aide de chemin d'accès relatif à certains points de toute façon)
Et que juste faire de l'etat dépendent gen/SvcGenLog
. Il serait un peu plus lisible et vous pouvez le faire dépendre de l' genscript/genmakefile.pl
, donc l' Makefile
en gen
sera régénérée si vous modifiez le script. Bien sûr, si rien d'autre affecte le contenu de l' Makefile
, vous pouvez faire de l'etat en dépend aussi.