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

Ниже приведен сценарий, который я написал на 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 

  • Как запустить команду на TTY из сеанса SSH?
  • Сравнение нескольких опций в bash (string)
  • bash: невозможно создать временный файл для здесь-документа: на устройстве нет места
  • Использование команды Sed без определения переменных в сценарии оболочки
  • Как выполнить синтаксический анализ / proc / cmdline перед запросом имени tty с помощью systemd
  • Различные формы выполнения сценария оболочки
  • Скрипт для su-c на экран не работает как предполагалось
  • Msgstr "sudo: source: команда не найдена"
  • 2 Solutions collect form web for “сценарий оболочки продолжается до распаковки файла”

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

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

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

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

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

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

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