Спасибо за исправления в strongbash
Принято все кроме #!/usr/bin/env bash
Нужно использовать shebang #!/bin/bash
Не нужно использовать shebang переносимости #!/usr/bin/env bash
Если кто хочет подискутировать - давайте аргументы.
Также добавлено исправлено два новых правила которые скоро попадут в crab_syntax
bashxxx
Запрещено удалять tmp в trap EXIT. создание временного файла это своего рода with file и его удаление это end with, чтоб было понтяно где он более не нужен аля область работы с файлом. И если файл остался в тмп то это признак, что есть ошибка в логике.
bashxxx+1
Запрещено в утилитах передавать результаты через промежуточные файлы. Только errno stdout stderr. В исключительных случаях имя файла должно быть в argv или конфиг в argv.
bashxxx+2
Выборочно использовать
spellshell
~~OWNERAPPROVE~~
Обсуждение
- Нужно будет добавлять rm во все места, где управление может прерваться, например: echo 123 > /tmp/1 do_some /tmp/1 || rm /tmp/1 do_some2 /tmp/1 || rm /tmp/1 rm /tmp/1
Можно сказать, что наличие /tmp/1 покажет, что в do_some проблемы и надо понять причину, но он может падать и по штатным причинам. with file для того и служит, что он обрабатывает внештатные ситуации и всегда закроет дескриптор/удалит временный файл.
- Также, когда в trap у нас удаление - это добавляет удобства при использовании временных файлов. Ты просто пишешь do_some>/tmp/you_script.sh.$$.do_some, и не паришься за его удаление, это довольно удобно.
- Закоментировав trap, можно сохранить все временные файлы для отладки, не нужно комментировать каждый rm. То, что обычно тебе нужен определенный файл - не правда, часто нужные файлы ты берешь из set -x
Мои аргументы за использование:
Я локально дебагая на ноуте обламываюсь тоже с bash.
У меня в /bin/bash лежит 3.2 версия, которая не умеет ничего нужного, но если заменить - могу поломать себе что-нибудь системное.
Отказываться от локального дебага в пользу ssh - боль и содомия.