выход 1, если файл пуст, в противном случае перейдите к следующему шагу - PullRequest
0 голосов
/ 06 декабря 2018

Я пишу сценарий bash.

Шаг 1 - Получить некоторые метаданные через curl и записать в файл.

Шаг 2 - Проверить, не пуст ли файл.Если файл пуст, выйдите из системы «Файл пуст. Выход ...» и выйдите с кодом состояния 1. Если файл не пуст, перейдите к шагу 3.

Шаг 3 - Дальнейшая обработка файла.

Так что я пытаюсь оптимизировать Шаг 2 в одну строку.

Это то, что я пробовал до сих пор.

[ -s sp_metadata.xml ] || echo "ERROR - SP Metadata returned null. Exiting..." && exit 1

Теперь, если файл пуст, яполучить следующий результат.

touch sp_metadata.xml
sh -x ./register.sh
+ [ -s sp_metadata.xml ]
+ echo ERROR - SP Metadata returned null. Exiting...
ERROR - SP Metadata returned null. Exiting...
+ exit 1

Но когда я записываю данные в файл, я получаю

echo "Test" > sp_metadata.xml
sh -x ./register.sh
+ [ -s sp_metadata.xml ]
+ exit 1

Похоже, что каждый раз он запускается exit 1.Я думаю, это из-за &&.

Я пытался

[ -s sp_metadata.xml ] || echo "ERROR - SP Metadata returned null. Exiting..." ; exit 1

, а также пытался

[ -s sp_metadata.xml ] || (echo "ERROR - SP Metadata returned null. Exiting..." && exit 1)

Но это не сработало.Есть идеи, что не так с моим синтаксисом?

1 Ответ

0 голосов
/ 06 декабря 2018
[ -s sp_metadata.xml ] || (echo "ERROR - SP Metadata returned null. Exiting..."; \
  exit 1)

не работает, потому что вы создаете подоболочку, поэтому exit 1 в основном завершает подоболочку, но не родительский сценарий.

Поэтому вы должны попробовать вместо этого:

[ -s sp_metadata.xml ] || { echo "ERROR - SP Metadata returned null. Exiting..."; \
  exit 1; }

, который должен работать (а также избегать затрат на создание подоболочки).

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

...