Bash скрипт выдает на Ctrl + C "longjmp вызывает неинициализированный фрейм стека", когда установлен trap 'stty echo' EXIT - PullRequest
0 голосов
/ 16 мая 2019

У меня есть простой скрипт, который отключает цикл с терминальным эхо. Установлена ​​ловушка для перехвата Ctrl + C для восстановления эха. Это почти всегда заканчивается сообщением «longjmp вызывает неинициализированный кадр стека ***: / bin / bash прекращен». Это вызвано командой "stty echo". Есть идеи как это исправить?

#!/bin/bash

stty -echo

trap 'echo EXIT; stty echo' EXIT
trap 'echo INT; exit' INT
trap 'echo QUIT; exit' QUIT
trap 'echo TERM; stty echo; exit' TERM

function l
{
    read -s -n 1 -t 0.01 X && return 1
    return 0
}

while true
do
    l || break
done

Когда не вызывается функция "l" и чтение вызывается непосредственно в цикле, это вызывает время от времени "Ошибка сегментации":

    read -s -n 1 -t 0.01 X && break
...