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

Я пытаюсь запустить простой скрипт-клонировать 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 абсолютный путь ~/some_dir/setup.py сценарий завершится неудачно позже, потому что он пытается получить доступ к ресурсам в той же папке.

  • В чем причина того, что файл конфигурации требуется для удаления приложения, установленного через configure, make и make install?
  • Как копировать git-репо из Makefile?
  • Что делает «make install» в Makefile, который поставляется с ядром?
  • Добавить строку текста в раздел файла правил
  • Как этот Makefile делает программу C даже без указания компилятора?
  • Linux. Проверьте параметры make-файла, с помощью которых создается текущее ядро.
  • Я хочу запускать команды, такие как make, make install, установка установки python без изменения каталогов
  • Проблемы с компиляцией node.js из источника с использованием ./configure
  • 2 Solutions collect form web for “Почему текущий каталог не изменяется в make-файле?”

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

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

    Например:

     target: git clone http://somerepo ~/some_dir cd ~/some_dir/ && python myscript.py install 

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

     $ pwd /home/user $ cat test.sh cd / $ cat Makefile test: . ./test.sh && pwd pwd $ make test . ./test.sh && pwd / pwd /home/user 
    Interesting Posts

    Добавление только существующих слов в файл из другого файла и удаление остальных (unix)?

    Добавить / обновить файл в существующий архив tar.gz?

    Сделайте место на моем диске, чтобы установить другую ОС

    Почему драйвер 8250 UART не разбудил TTY, если еще не принято 256 символов?

    Разрешить пользователю использовать sudo для выполнения чего-либо, только один исполняемый файл как nopassword

    Как удалить hex-суффикс из имен кэшира DNF в Fedora?

    Как заменить вкладку символом в файле

    Можно ли использовать cfdisk для изменения размеров разделов на диске, к которому будут обращаться компьютеры Windows?

    Есть ли способ перенаправить файл, который написан

    Переформатируйте или отформатируйте F10 из меню запуска файла окна в Xfce

    Автозаполнение в соответствии с возможными целями

    Использование virtio на QEMU без KVM

    Fedora 8 в последнее время очень медленно замедляется с частыми заморозками

    Разница между ssl / https и простой https в выходе nmap

    Почему мои SSD находятся в / dev / hdx вместо / dev / sdx на CentOS 5.9?

    Linux и Unix - лучшая ОС в мире.