bash

12 commands

12 shown

Строгий режим со безопасным IFS Прерывать при ошибках, неопределённых переменных и сбоях в пайпах; разбивать только по переводу строки и табу set -euo pipefail; IFS=$'\n\t' #bash#troubleshooting#ci Очистка временного каталога через trap Автоудаление каталога mktemp при выходе или сигнале; важно: заключайте $tmp в кавычки от пробелов tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT INT TERM #bash#security#troubleshooting Сравнение вывода двух команд Подстановка процессов сравнивает два потока без временных файлов diff <(kubectl get cm a -o yaml) <(kubectl get cm b -o yaml) #bash#debug#k8s Безопасное чтение строк файла в массив mapfile -t убирает переводы строк и сохраняет пробелы в отличие от разбиения в for-цикле mapfile -t lines < file.txt; printf '%s\n' "${lines[@]}" #bash#troubleshooting Набор расширений параметров basename, удаление расширения и глобальная замена без вызова sed или basename f=/var/log/app.log.gz; echo "${f##*/}" "${f%.*}" "${f//log/LOG}" #bash#performance Захват по регексу через BASH_REMATCH Встроенное сопоставление по регексу извлекает группы; важно: не заключайте регекс справа в кавычки [[ $s =~ ^([0-9]+)\.([0-9]+) ]] && echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" #bash#debug Параллельный xargs по null-разделённому вводу Запуск N параллельных задач с NUL-разделителями, безопасно для имён с пробелами find . -name '*.log' -print0 | xargs -0 -P"$(nproc)" -n1 gzip #bash#performance Проверка PIPESTATUS каждого этапа Проверка кода возврата каждого этапа пайпа; $? отдаёт только последнюю команду curl -s "$url" | jq .data; echo "${PIPESTATUS[@]}" #bash#debug#troubleshooting Разбор флагов через getopts POSIX-разбор опций с аргументами; -n принимает значение, -v является флагом while getopts "n:v" o; do case $o in n) ns=$OPTARG;; v) verbose=1;; esac; done #bash#ci Ограничение команды через timeout с kill SIGTERM на 30с, затем SIGKILL через 5с; код 124 означает принудительное завершение timeout -k 5s 30s ./long_task.sh || echo "timed out: $?" #bash#troubleshooting Отдельный дескриптор для структурированного лога Открыть дескриптор 3 в файл, писать независимо от stdout и закрыть его exec 3>>audit.log; echo "$(date -Is) start" >&3; exec 3>&- #bash#observability zsh рекурсивный glob и пакетное переименование zsh: рекурсивный список только обычных файлов и безопасное массовое переименование через zmv setopt extendedglob; print -l **/*(.); autoload zmv; zmv '(*).txt' '$1.bak' #zsh#troubleshooting
no commands match