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

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

  • Поиск файлов внутри нескольких подкаталогов и zip-каталогов
  • Gzip большое количество символических файлов
  • Невозможно использовать find -print в AWK
  • Проверьте связанные имена файлов и удалите один из них
  • Сценарий оболочки для изменения оболочки пользователя
  • grep и умножить определенные столбцы
  • Имена файлов каталогов с sed с пробелами
  • Rsync два типа файлов в одной команде?
  • 2 Solutions collect form web for “сценарий оболочки продолжается до распаковки файла”

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

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

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

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

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

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

    Interesting Posts

    Как обнаружить экран заблокирован или нет, когда экранная заставка активна на Redhat 6.6?

    Как правильно форматировать вывод с помощью команды Awk printf?

    Объединение файлов с использованием метода застежки-молнии / позднего слияния

    Как установить некоторые необходимые библиотеки для программы без sudo?

    Разрешения mkdir не соответствуют umask (изменение зависит от местоположения)

    Настройте UPower для распознавания ИБП PowerWare 9130 (Ubuntu Xenial)

    Почему разрешение отклонено для запуска npm с использованием node-dev?

    Debian Linux не запускается, поскольку не было найдено загрузочного устройства

    Любой текстовый редактор, который перечисляет числа слов в файле?

    Установленный Docker, затем потерянное подключение к Интернету при перезагрузке!

    Уведомления xfce не работают

    CGI с Shell Script

    Случайный названный файл в домашнем каталоге, возможно, взломан?

    Как получить доступ к флеш-сайту, который отклоняет мой плагин (64-разрядный)?

    pax, неверный вариант замены строки

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