Я пытаюсь запустить простой скрипт - клонировать репозиторий git в определенный каталог, затем cd
в этот каталог, чтобы выполнить скрипт установки.
Этот скрипт находится в Makefile.
Но, cd
похоже, не работает. Он не находит мой установочный скрипт.
Я добавил pwd после cd
в сценарии, и он показывает мне каталог, из которого я выполняю сценарий, а не каталог, cd
в который я вхожу .
В чем проблема?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
=>
pwd
: /hereIsPathToDirectoryFromWhichIRunTheScript
python: невозможно открыть файл 'setup.py': [Errno 2] Нет такого файла или каталога
Это также не работает с ./setup.py
.
Если я введу абсолютный путь, ~/some_dir/setup.py
сценарий завершится неудачей позже, потому что он пытается получить доступ к ресурсам в той же папке.
make
cd-command
Ixx
источник
источник
/bin/sh: mycd: command not found
Ответы:
Вы используете make-файл. Makefiles не являются скриптами, каждая строка выполняется в новой оболочке. Это означает, что при изменении среды в строке (например,
cd
) это изменение не распространяется на следующую строку.Решение состоит в том, что когда вы хотите сохранить среду между командами, вы запускаете все команды в одной строке. Все команды будут выполняться в одной оболочке, и среда сохраняется.
Например:
источник
Скрипт запускается в подоболочке , что означает, что он имеет свой собственный
$PWD
. Как только он выходит, вы получаете «старый»$PWD
. Если вы хотите сохранить,$PWD
вам нужноsource
(иначе.
) сценарий, а не запускать его. Однако это не будет работать в Makefile, потому что каждая команда запускается в отдельном подоболочке:источник