J'essaie d'exécuter un simple script - clonez un référentiel git dans un certain répertoire, puis cd
dans ce répertoire afin d'exécuter un script d'installation.
Ce script est dans un Makefile.
Mais le cd
semble ne pas fonctionner. Il ne trouve pas mon script d'installation.
J'ai ajouté un pwd après le cd
dans le script, et il me montre le répertoire à partir duquel j'exécute le script, pas le répertoire dans lequel cd
j'entre.
Quel est le problème?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
=>
pwd
: /hereIsPathToDirectoryFromWhichIRunTheScript
python: impossible d'ouvrir le fichier 'setup.py': [Errno 2] Aucun fichier ou répertoire de ce type
Cela ne fonctionne pas non plus ./setup.py
.
Si j'entre le chemin absolu, ~/some_dir/setup.py
le script échoue plus tard, car il essaie d'accéder aux ressources dans le même dossier.
la source
/bin/sh: mycd: command not found
Réponses:
Vous utilisez un makefile. Les Makefiles ne sont pas des scripts, chaque ligne est exécutée dans un nouveau shell. Cela signifie que lorsque vous modifiez l'environnement en ligne (comme
cd
), ce changement n'est pas propagé à la ligne suivante.La solution est que lorsque vous souhaitez préserver l'environnement entre les commandes, vous exécutez toutes les commandes sur la même ligne. Toutes les commandes seront alors exécutées dans le même shell, et l'environnement sera préservé.
Par exemple:
la source
Un script est exécuté dans un sous - shell , ce qui signifie qu'il a le sien
$PWD
. Une fois qu'il sort, vous obtenez le "vieux"$PWD
. Si vous souhaitez conserver le dont$PWD
vous avez besoinsource
(aka..
) Le script au lieu de l'exécuter. Cela ne fonctionnera pas dans un Makefile, cependant, car chaque commande est exécutée dans un sous-shell distinct:la source