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

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

  • Обработка файлов с пробелами в именах
  • Как заменить «&» на «& amp;», за исключением того, что уже является частью XML-объекта?
  • курсор и объединение диакритики в оболочке
  • gnome-terminal: отслеживать каталог на новой вкладке
  • Перенаправление вывода в зависимости от регулярного выражения grep
  • Есть ли инструмент, который автоматически вставляет и обновляет блок заголовка сценария, например, сценарии оболочки или Python?
  • Проблемы с img2pdf и пробелы в именах файлов
  • «переключатель» на основе оболочки
  • xsel </ tmp / xselection не работает в скрипте
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • Как преобразовать относительный к абсолютному пути, портативно и надежно?
  • Почему «$ i | sed "не работает?
  • Interesting Posts

    Как параметризовать параметр LocalForward в ssh_config?

    Получение xmonad для отображения имени текущей рабочей области в xmobar

    Мониторинг процессов с использованием только системных вызовов (без утилит, таких как `top`)

    Как анализировать тип данных отчета в Bash?

    Как получить статус сети (онлайн / офлайн) и присвоить ее переменной в сценарии оболочки?

    «Sort -h» не работает в Redhat 5.9. Любой способ его обновления?

    Медиаплеер с автоматическим планированием файлов

    Можно ли ссылаться на глобальную переменную, даже если локальная область существует с тем же именем?

    Клавиша 'd' в VNC Viewer сводит к минимуму все окна

    Некоторые проблемы при установке libvirt

    Как переписать ярлык для клиента mysql? – или: Как заменить editline на readline для клиента mysql?

    Что должен делать мой эмулятор терминала с кодами управления DC1?

    В чем разница между режимами I2C и PS2?

    Не удалось закрыть страницы в Firefox после скрытия панели вкладок

    Как отключить звуковой сигнал в xfce при нажатии кнопки удаления?

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