Почему текущий каталог не изменяется в make-файле?

Дистрибутивы Red Hat должны иметь инструмент GUI для названного "Дисками", установленными, и да, быть чрезвычайно осторожными, особенно при работе созданной производителем машины, потому что часто люди времен заканчивают тем, что освободили свое гарантийное питание с разделами, потому что производители почти всегда имеют раздел, полный средств восстановления, скрытых где-нибудь.

10
19.08.2014, 00:06
2 ответа

Вы используете make-файл. Make-файлы - это не сценарии, каждая строка выполняется в новой оболочке. Это означает, что когда вы меняете среду в строке (например, cd ), это изменение не распространяется на следующую строку.

Решение состоит в том, что если вы хотите сохранить среду между командами, вы запускаете все команды в одной строке. После этого все команды будут выполняться в одной оболочке, и среда будет сохранена.

Например:

target:
    git clone http://somerepo ~/some_dir
    cd ~/some_dir/ && python myscript.py install
30
27.01.2020, 19:59

Сценарий выполняется в подоболочке , что означает, что у него есть своя $PWD. После его выхода вы получаете "старый" $PWD. Если вы хотите сохранить $PWD, вам нужен источник $PWD (также известный как . ) скрипт вместо того, чтобы его запускать. Однако в Makefile это не сработает, потому что каждая команда выполняется в отдельной подоболочке:

$ pwd
/home/user
$ cat test.sh
cd /
$ cat Makefile
test:
    . ./test.sh && pwd
    pwd
$ make test
. ./test.sh && pwd
/
pwd
/home/user
0
27.01.2020, 19:59

Теги

Похожие вопросы