сценарий оболочки продолжается до распаковки файла

Ниже приведен сценарий, который я написал на Mac (используя оболочку bourne «sh».) Это часть более крупного скрипта.

Цель: у меня есть zip-файл, где я заранее знаю имена файлов с zip-файлами. Поэтому я хочу разархивировать zip-файл в / tmp / sampleFolder. Затем я хочу проверить эту папку, чтобы гарантировать, что имена файлов, которые я ожидаю, находятся там.

Например, если один из файлов в zip является john.txt, я хочу проверить, что

/tmp/sampleFolder/john.txt 

существует.

Проблема. Как ни странно, моя проверка на существование файла, кажется, происходит до того, как распаковка завершена. Я могу исправить это, добавив set -e в начало скрипта. Тогда все команды в скрипте, похоже, выполняются последовательно. Но я не могу понять, почему это исправляет это.

Я был бы признателен:

a.) Альтернативные решения / объяснение того, почему проверка наличия файла происходит до того, как файл распакуется

б)) или объяснение причин, по которым set -e заставляет скрипт выполняться последовательно. Мое исследование в set -e просто говорит, что скрипт вынужден выйти, если команды делают возврат, отличный от 0. Однако вместо простого выхода скрипт запускается последовательно. Похоже, что есть что-то еще. Спасибо!

 #!/bin/sh rm -rf "/tmp/sampleFolder" unzip ~/Desktop/myFile.zip -d "/tmp/sampleFolder" if [ ! -r /tmp/sampleFolder/john.txt ]; then echo "file not present!" fi 

2 Solutions collect form web for “сценарий оболочки продолжается до распаковки файла”

Я не вижу, чтобы инструкции в опубликованном скрипте выполнялись не последовательно.

Ниже приведен сценарий, который я написал на Mac (используя оболочку bourne «sh».) Это часть более крупного скрипта.

Если есть действительно проблема, это, скорее всего, будет в большом скрипте, поэтому его нет в упрощенном примере.

Сценарии оболочки всегда работают по порядку. Set -e не влияет на порядок операций, только выходя на ненулевой.

Исключение из «в порядке» – это когда вы выполняете фоновые задачи с помощью & , которая, как представляется, не присутствует здесь.

Я подозреваю, что ваш unzip не ведет себя так, как вы ожидаете. Сначала попробуйте echo $? код возврата unzip с помощью echo $? на следующей строке и посмотреть, не преуспеет ли она. После этого добавьте ls -l /tmp/sampleFolder чтобы просмотреть содержимое.
Вы также можете запустить set -x чтобы увидеть вывод трассировки из bash, который также покажет порядок операций в скрипте.

  • Как использовать grep или sed для извлечения нескольких совпадений в одной строке
  • Как добавить две переменные, переданные в оболочке, которая возвращает число целых чисел?
  • Сортировка jpg в соответствии с датой создания и конвертирование в одиночный pdf
  • Используя cURL, как я могу получить числовую строку, содержащую запятые и пробелы, и преобразовать их в строку NON COMAFIED
  • Ошибка команды Bash
  • Как извлечь IP и URL из файла журнала
  • Почему я не могу напечатать переменную, которую я вижу на выходе env?
  • Создание предложений для ошибок из словаря поиска
  • Как создать псевдоним для двух команд Git, которые используют параметр?
  • Как искать определенные разделы файла, а затем извлекать только соответствующую информацию в этом разделе?
  • Принимая аргументы оболочки и обновляя значения
  • Linux и Unix - лучшая ОС в мире.