The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
MAKE не останавливается, если утилита возвращает больше 1, !*! echo, 26-Фев-06, 17:05  [смотреть все]
tar завершается с ошибкой, но возвращает не 1, а 2. make продолжает работать дальше.
Есть ли способ его останавливать на всё, что не ноль?
ОС Linux RH
  • MAKE не останавливается, если утилита возвращает больше 1, !*! Андрей, 19:35 , 26-Фев-06 (1)
    по умолчанию всё что не 0 будет воспринято как ошибка
    с какими ключами запускается make ?
    покажите ваш Makefile или ту его часть где возникает ошибка


    • MAKE не останавливается, если утилита возвращает больше 1, !*! echo, 21:27 , 26-Фев-06 (2)
      >по умолчанию всё что не 0 будет воспринято как ошибка

      я тоже так всегда думал

      >с какими ключами запускается make ?

      вроде нет ключей, просто в Makefile цели, как обычно.
      .SILENT: определён, чтобы без эха.

      >покажите ваш Makefile или ту его часть где возникает ошибка

      да я просто накидал такое, не заканчивает этот гда работу, код завершения 2 и эхо "Here!" выдаёт.

      all:
          tar ex
          echo "exit code $$?"
          echo "Here!"

      я делаю в мэйк-файле tar cf - -C /mydir/ . | tar xvf - -C /my/dist/
      если mydir не создан, надо останавливаться.
      а эта дура дальше маслает.
      вот @#$%.


      • MAKE не останавливается, если утилита возвращает больше 1, !*! Андрей, 07:23 , 27-Фев-06 (3)
        взял ваш пример
        all:
            @tar ex
            @echo "exit code $$?"
            @echo "Here!"

        $ make
        tar: invalid option -- e
        Try `tar --help' or `tar --usage' for more information.
        make: *** [all] Error 64
        $

        то есть всё как и должно быть

        >я делаю в мэйк-файле tar cf - -C /mydir/ . | tar
        >xvf - -C /my/dist/
        >если mydir не создан, надо останавливаться.
        >а эта дура дальше маслает.
        >вот @#$%.

        эта конструкция действительно не показывает то что вы от неё ожидаете, но работает правильно, это ваши ожидания неверны :-)

        первая часть (tar cf - -C mydir/ .) завершается с ошибкой в результате которой на вход следующей команде (tar xvf - -C my/dist/) подаётся пустой поток и команда завершается без ошибки,
        раз нечего разарихировать, то и нечего директорию проверять,
        и вот этот 0 от второй команды заставляет make продолжить работу.

        кстати конструкция вида
        all:
            command
            echo $$?

        практически бесполезна так как make каждую строку запускает в отдельном shell, поэтому вторая строка всегда вернёт 0. Надо писать через ; и использовать \ если хотите перенести строки

        присутствие директории можно проверит по другому, например вот так:
        all:
          [ -d mydir ] && tar cf - -C mydir/ . | tar xvf - -C my/dist/

        • MAKE не останавливается, если утилита возвращает больше 1, !*! echo, 10:43 , 27-Фев-06 (4)

          >результате которой на вход следующей команде (tar xvf - -C my/dist/)
          >подаётся пустой поток и команда завершается без ошибки,

          да, я уже и сам допёр


          >присутствие директории можно проверит по другому, например вот так:
          >all:
          >  [ -d mydir ] && tar cf - -C mydir/
          >. | tar xvf - -C my/dist/

            дело не только в наличии каталога. я написал тару ключи с ошибкой.
            вывод быстро пролетал мимо и я не замечал там сообщения об ошибке.
            долго искал грабли.

            надо чтобы завершалась работа при любой ошибке.
            можно это грамотно написать к пайпу?
            или удачное завершение последней команды всегда будет рулить?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру