Simplemente no puedes hacer esto. No hay forma de que el proceso de creación pueda cambiar el entorno de su padre (o su directorio actual, en el que podría estar pensando a continuación).
De hecho, está sucediendo incluso menos de lo que piensas.
- No todas las
make
implementaciones reflejan la asignación a la PATH
variable make en el entorno; GNU make (que se encuentra en Linux y otros sistemas) sí, pero BSD make no.
- Cada línea de comando debajo de un objetivo se ejecuta en una subshell separada. (Excepto en algunas implementaciones anteriores de BSD make). Por lo tanto, la
export PATH
línea se ejecuta en un shell que termina inmediatamente después. No es que esta línea esté haciendo algo en primer lugar; si PATH
se define en ese punto, es porque ya está en el entorno del shell.
Make es para construir cosas automáticamente. Si desea establecer variables para su entorno interactivo, esta no es la herramienta que debería mirar. En su lugar, escriba un fragmento de shell y búsquelo en el shell actual:
. ./define-my-variables.sh
En su archivo MAKE, obtenga el script en cada subshell . Puede usar una barra invertida para hacer un comando largo; recuerda eso
- La secuencia de barra invertida-nueva línea se elimina por marca, por lo que el shell no verá una nueva línea allí.
- No obstante, recuerde prefijar cada línea con una pestaña.
- El comportamiento de error de Make es abortar si falla un comando. El shell no lo hará de forma predeterminada, y el fallo de cualquier comando, pero el último pasará desapercibido de forma predeterminada, por lo que debe ejecutar
set -e
.
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
¹ Nota obligatoria: de ninguna manera sensata. Incluso invocar de forma remota a chdir
través ptrace
de un depurador no funcionará como lo hace con la mayoría de los shells porque no les gusta que cambien su directorio actual bajo sus pies.