Bug 32147 - errors with bash4
Summary: errors with bash4
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: gear (show other bugs)
Version: unstable
Hardware: all Linux
: P3 minor
Assignee: Dmitry V. Levin
QA Contact: qa-sisyphus
URL: https://bugzilla.altlinux.org/show_bu...
Keywords:
Depends on:
Blocks: 31399
  Show dependency tree
 
Reported: 2016-05-27 14:50 MSK by Ivan Zakharyaschev
Modified: 2017-11-20 19:32 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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).