[devel] Steam и Bash4

Alexey Tourbin alexey.tourbin на gmail.com
Пт Сен 1 02:01:27 MSK 2017


On Fri, Sep 01, 2017 at 12:30:31AM +0300, Nazarov Denis wrote:
> Сегодняшнее обновление клиента Steam с серверов Valve принесло неприятность - 
> теперь оно требует bash 4, т.к. в скрипте $HOME/.local/share/Steam/steam.sh  
> теперь используется инструкция
> 
> declare -A
> 
> которая в bash 3 не поддерживается. Steam просто виснет на логине. Если 
> исправить в начале этого файла интерпретатор с 
> 
> #!/usr/bin/env bash
> 
> на
> 
> #!/usr/bin/env bash4
> 
> то всё работает.
> 
> Если поправить интерпретатор в /usr/bin/steam, то это не помогает, т.к. он в 
> итоге запускает скрипт $HOME/.local/share/Steam/steam.sh (который сам 
> обновляется с серверов Valve). 
> 
> Что-то я никак не могу придумать как решить эту появившуюся проблему. У кого-
> нибудь есть какие-нибудь идеи?

Можно пропатчить /bin/bash.

--- bash-3.2.57/shell.c-	2017-09-01 01:11:07 +0300
+++ bash-3.2.57/shell.c	2017-09-01 01:28:39 +0300
@@ -448,6 +448,13 @@ main (argc, argv, env)
   this_command_name = shell_name;	/* for error reporting */
   arg_index = parse_shell_options (argv, arg_index, argc);
 
+  if (arg_index < argc && !want_pending_command /* not -c */ &&
+      strstr(argv[arg_index], "/Steam/steam.sh"))
+    {
+      execv("/bin/bash4", argv);
+      fprintf(stderr, "execv /bin/bash4 failed: %m");
+    }
+
   /* If user supplied the "--login" (or -l) flag, then set and invert
      LOGIN_SHELL. */
   if (make_login_shell)

Хорошо работает!

$ pwd
.../BUILD/bash-3.2.57/build-bash
$ cat ./Steam/steam.sh
echo $BASH_VERSION
$ ./bash -c 'echo $BASH_VERSION ./Steam/steam.sh'
3.2.57(10)-release ./Steam/steam.sh
$ ./bash './Steam/steam.sh'
4.2.50(1)-release


Подробная информация о списке рассылки Devel