TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
BashTex | Linux

8 Sep, 12:15

Open in Telegram Share Report

failglob - почему Bash должен падать при нераскрывшемся glob

Обычно Bash спокойно оставляет glob как есть, если совпадений нет:

rm /var/log/app/*.old

Если .old-файлов нет, команда фактически получит:

rm: cannot remove '/var/log/app/*.old': No such file or directory

Но в автоматизации это может быть проблемой: скрипт продолжит выполнение, хотя вы рассчитывали, что glob что-то нашёл.

▪️failglob меняет поведение

shopt -s failglob

files=(/var/log/app/*.old)

Если совпадений нет, Bash сам выдаст ошибку:

bash: no match: /var/log/app/*.old

То есть проблема обнаруживается на этапе раскрытия glob, ещё до запуска команды.

▪️Особенно полезно в скриптах:

#!/usr/bin/env bash

set -e
shopt -s failglob

for file in /backup/*.tar.gz; do
process "$file"
done

Без failglob цикл может получить буквально строку /backup/*.tar.gz.

С failglob скрипт сразу сигнализирует, что ожидаемых файлов нет.

▪️Но есть нюанс

failglob не всегда нужен. Если отсутствие файлов - нормальная ситуация, лучше использовать nullglob:

shopt -s nullglob

files=(/backup/*.tar.gz)

for file in "${files[@]}"; do
process "$file"
done

Тогда при отсутствии совпадений массив просто будет пустым.

Итого получается:

failglob → отсутствие совпадения считается ошибкой. nullglob → отсутствие совпадения превращается в пустой список.

Для критичных автоматизаций failglob помогает не пропустить логическую ошибку, замаскированную обычным поведением Bash.

BashTex 📱 #bash #linux

519 0 15 4
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot