Próbuję uruchomić prosty skrypt - sklonować repozytorium git do określonego katalogu, a następnie cd
do tego katalogu, aby wykonać skrypt instalacyjny.
Ten skrypt znajduje się w pliku Makefile.
Ale cd
wydaje się, że nie działa. Nie znajduje mojego skryptu instalacyjnego.
Dodałem pwd po cd
skrypcie i pokazuje mi katalog, z którego wykonuję skrypt, a nie katalog, w którym się cd
znajduję.
Jaki jest problem?
git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install
=>
pwd
: /hereIsPathToDirectoryFromWhichIRunTheScript
python: nie można otworzyć pliku „setup.py”: [Errno 2] Brak takiego pliku lub katalogu
To też nie działa ./setup.py
.
Jeśli wprowadzę ścieżkę bezwzględną, ~/some_dir/setup.py
skrypt nie powiedzie się później, ponieważ próbuje uzyskać dostęp do zasobów w tym samym folderze.
make
cd-command
Ixx
źródło
źródło
/bin/sh: mycd: command not found
Odpowiedzi:
Używasz makefile. Pliki makefile nie są skryptami, każda linia jest wykonywana w nowej powłoce. Oznacza to, że po zmianie środowiska w linii (np.
cd
) Zmiana ta nie jest propagowana do następnej linii.Rozwiązaniem jest to, że jeśli chcesz zachować środowisko między poleceniami, wszystkie polecenia wykonujesz w tym samym wierszu. Wszystkie polecenia zostaną wówczas wykonane w tej samej powłoce, a środowisko zostanie zachowane.
Na przykład:
źródło
Skrypt jest uruchamiany w podpowłoce , co oznacza, że ma swoją własną
$PWD
. Po wyjściu otrzymasz „stary”$PWD
. Jeśli chcesz zachować$PWD
, musiszsource
(aka..
) Skrypt zamiast go uruchamiać. Nie będzie to jednak działać w Makefile, ponieważ każde polecenie jest uruchamiane w osobnej podpowłoce:źródło