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

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

  • Когда он не запускается с терминала, Emacs НЕ выбирает переменную среды SSH_AUTH_SOCK
  • ssh на сервер, у которого есть сломанная установка bash
  • Условный оператор Баша и присвоение
  • Проблема с командой установки для копирования всего каталога
  • Выполнить скрипт оболочки из php, как пользователь root?
  • Установка и размонтирование в том же сценарии оболочки приводит к ошибке
  • Как безопасно отключить сетевой ресурс на Linux STB без сбоев (я получаю GSOD)?
  • Надежная идентификация пути к каталогу, содержащему запущенный скрипт
  • Подстановка на месте для строк, соответствующих некоторому шаблону в заданном наборе файлов
  • Установка плагина gedit на Fedora
  • Несколько аргументов параметра, использующих getopts в bash
  • Linux и Unix - лучшая ОС в мире.