Bug 32147

Summary: errors with bash4
Product: Sisyphus Reporter: Ivan Zakharyaschev <imz>
Component: gearAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: minor    
Priority: P3 CC: alexey.tourbin, at, glebfm, kde, ldv, legion, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
URL: https://bugzilla.altlinux.org/show_bug.cgi?id=32110#c6
Bug Depends on:    
Bug Blocks: 31399    

Description Ivan Zakharyaschev 2016-05-27 14:50:24 MSK
+++ 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" я его немного подправил, и вроде он заработал.
Comment 1 Repository Robot 2017-11-20 19:32:48 MSK
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).