[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