Подключение второго монитора вызывает странные ошибки

Any ideas how to fix or bypass this ?

Вы можете обойти это, включив режим posix либо с помощью опции --posix, либо временно с помощью set -o posix:

.

set -o posix
select opt in foo bar baz; do
    echo "opt=$opt"
done
set +o posix

Для объяснения такого поведения вы можете посмотреть на функцию zread(), которая используется встроенной функцией read(, которая также вызывается внутри bash в select):

.

  while ((r = read (fd, buf, len)) < 0 && errno == EINTR)
    /* XXX - bash-5.0 */
    /* We check executing_builtin and run traps here for backwards compatibility */
    if (executing_builtin)
      check_signals_and_traps ();   /* XXX - should it be check_signals()? */
    else
      check_signals ();

По какой-то особой причине executing_builtinустанавливается только при явном вызове встроенной функции read, а не при ее вызове с помощью select. Это очень похоже на ошибку, а не на что-то преднамеренное.

При работе в режиме posix сигнал отменяет встроенную функцию read. В этом случае вызывается zreadintr(), что, в отличие от zread(), не является повторным -вызовом прерванного системного вызова read(2)после запуска ловушек. См.builtins/read.def:

      if (unbuffered_read == 2)
        retval = posixly_correct ? zreadintr (fd, &c, 1) : zreadn (fd, &c, nchars - nr);
      else if (unbuffered_read)
        retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1);
      else
        retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c);

Подробнее о «перезапуске» bash readвстроенной здесь .

0
01.10.2020, 23:57
1 ответ

Итак, я наконец-то смог получить доступ к настройкам дисплея для внешнего монитора, и по какой-то странной причине масштабирование дисплея было установлено на 48x, что вызывало массу проблем. Я только что изменил это обратно 1 раз, и теперь все работает нормально.

0
18.03.2021, 23:00

Теги

Похожие вопросы