Как может я игнорировать “zip, предупреждающую: имя, не подобранное” при использовании zip, управляет с-d опцией?

sed 's/\#.*$'//' /path/to/logfile # this will trim anything including and after a `#` on every line.
2
12.06.2014, 14:54
1 ответ

Обычно в сценарии оболочки даже строка, генерирующая ошибку, не останавливает выполнение сценария оболочки. Он просто перейдет на следующую строку.

Заметное исключение - если вы установили флаг для выхода из оболочки в случае сбоя какой-либо подкоманды. Иногда это делается путем добавления "set -e" в верхней части скрипта. Если у вас есть что-то подобное в вашем скрипте, он будет прерван любой командой в скрипте, возвращающей ошибку. Возможные варианты в этом случае:

  • Удалить эту опцию. Это может иметь разветвления для остальной части вашего сценария, поэтому не делайте этого по прихоти.

  • Отключите эту опцию для раздела скрипта, в котором вы находитесь, затем снова включите, чтобы продолжить:

     set + e
    zip -d archive.zip file.txt
    set -e
     
  • Обеспечьте выход для сбойной строки, чтобы оболочка считала команду успешной, даже если что-то не удалось. Это можно сделать разными способами, но один простой - использовать оператор ИЛИ:

     zip -d archive.zip file.txt ||  истинный
     

    Это запустит команду zip, но в случае неудачи запустит истинную команду, и родительская оболочка получит от нее код возврата (что, конечно, является успехом). Иногда вы можете увидеть это написанное ||: , что немного быстрее и сложнее, но не волшебно; : просто является встроенной в оболочку командой no-op, которая также возвращает код ошибки успеха, даже если она ничего не делает.

    Другой способ сделать это - запустить команду во вспомогательной оболочке, заключив ее в () , чтобы хотя команда внутри нее могла завершиться неудачно, подоболочка выполнила свою работу, поэтому родительский сценарий с набором set -e не умрет. Это неоптимально для одной команды, но может быть полезно, если вы хотите запустить целый набор вещей.

С другой стороны, если вы просто хотите подавить сообщение об ошибке, генерируемое zip, вы можете перенаправить поток стандартных ошибок в / dev / null с помощью ( 2> / dev / null ), чтобы подавить сгенерированные сообщения (или закройте его с помощью 2> & - ).

3
27.01.2020, 22:06

Теги

Похожие вопросы