Estoy tratando de ejecutar un script simple: clonar un repositorio git en un directorio determinado, luego cd
a este directorio para ejecutar un script de instalación.
Este script está en un Makefile.
Pero cd
parece que no funciona. No encuentra mi script de instalación.
Agregué un pwd después de cd
en 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.py
el 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 found
Respuestas:
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$PWD
que 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