+++ This bug was initially created as a clone of Bug #32110 +++ Comment #6 From alexey.tourbin@gmail.com 2016-05-26 21:32:57 Created an attachment (id=6735) [details] gear patch for bash4+ This patch might be redundant: only one hunk might be needed. --- /usr/bin/gear-sh-functions- 2016-02-02 15:03:33.000000000 +0000 +++ /usr/bin/gear-sh-functions 2016-03-08 11:29:46.289625374 +0000 @@ -69,7 +69,7 @@ uninstall_cleanup_handler() # 2ns arg is the name of variable that contains the value to be assigned. set_var_value() { - eval "$1=\"\$$2\"" + eval "$1=\"\${$2-}\"" } lineno= @@ -444,6 +444,7 @@ disable_specsubst= get_specsubst_from_rules() { if [ -z "$disable_specsubst" ]; then + local specsubst= get_uniq_directive_from_rules specsubst specsubst if [ -n "$specsubst" ]; then [ -z "$(printf %s "$specsubst" |LANG=C tr -d '[:alnum:]_[:space:]')" ] || Comment #7 From alexey.tourbin@gmail.com 2016-05-26 21:33:24 Имхо, нет смысла дальше поддерживать bash != bash4. Bash < 4 прекратился обновляться уже почти 10 лет назад (версия 3.2 вышла в октябре 2006 года; дальше только errata и security fixes). Я у себя на одной машине с альлинуксом уже второй год обновляю bash самостоятельно; сейчас это bash43-042. Кроме того, я сделал всего один подпакет - bash, и симлинк "ln -s bash %buildroot/bin/sh". Я считаю, что всякие игры в другие шеллы неинтересны и никому не нужны. Люди рассчитывают на bash4+. (For the record, я также скептически отношусь к dash.) Я столкнулся с тем, что в bash < 4 не работают следующие вещи: - доступ к массиву с конца; вот строчка кода, которую я написал: w=1280 h=720 orig=("${orig[-1]}" "${orig[@]}") - самое главное, "wait -n", ожидание завершения первого процесса; без этого примитива нельзя реализовать сложный пайплайн с параллельной обработкой каждой стадии; я где-то писал наброс на эту тему, кажется в группе ВКонтакте "Типичный Линукс", но сейчас не смог его найти. К сожалению, если обновить системный bash до bash4+, то часть скриптов в альт линуксе перестает работать. К счастью, этих скриптов не так много. Разозлил меня один раз только gear(1), где используется eval. Методом исправления по-живому "sudo vim" я его немного подправил, и вроде он заработал.
gear-2.1.1-alt1 -> sisyphus: Mon Nov 20 2017 Dmitry V. Levin <ldv@altlinux> 2.1.1-alt1 - Applied bash4 compatibility workaround (closes: #32147). - Added SOURCE_DATE_EPOCH support (closes: #34203).