Estoy tratando de ejecutar un script simple: clonar un repositorio git en un directorio determinado, luego cda este directorio para ejecutar un script de instalación.
Este script está en un Makefile.
Pero cdparece que no funciona. No encuentra mi script de instalación.
Agregué un pwd después de cden el script, y me muestra el directorio desde donde estoy ejecutando el script, no el directorio donde estoy cd.
¿Cuál es el problema?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
=>
pwd: /hereIsPathToDirectoryFromWhichIRunTheScript
python: no se puede abrir el archivo 'setup.py': [Errno 2] No existe tal archivo o directorio
Tampoco funciona con ./setup.py.
Si ingreso la ruta absoluta, ~/some_dir/setup.pyel script falla más tarde porque está intentando acceder a los recursos en la misma carpeta.
make
cd-command
Ixx
fuente
fuente

/bin/sh: mycd: command not foundRespuestas:
Estás usando un archivo MAKE. Los Makefiles no son scripts, cada línea se ejecuta en un nuevo shell. Es decir, cuando cambia el entorno en línea (como
cd), ese cambio no se propaga a la siguiente línea.La solución es que cuando desea preservar el entorno entre comandos, ejecuta todos los comandos en la misma línea. Todos los comandos se ejecutarán en el mismo shell y se preservará el entorno.
Por ejemplo:
fuente
Un script se ejecuta en una subshell , lo que significa que tiene el suyo
$PWD. Una vez que sale, obtienes el "viejo"$PWD. Si desea conservar el$PWDque necesitasource(también conocido como.) el script en lugar de ejecutarlo. Sin embargo, esto no funcionará en un Makefile, porque cada comando se ejecuta en una subshell separada:fuente