В чем проблема? Получение ошибки ENOTTY при вызове функции tcgetattr (), когда процесс вызывается из скрипта. Ошибка появляется только при запуске из скрипта. Если он запускается из интерактивной оболочки, он работает нормально.
Что именно делает процесс? Процесс пытается отключить каноническую обработку ввода от стандартного ввода. Это необходимо, потому что входные данные могут поступать в виде пакетов и могут перегружать входную очередь. Для этого процесс получает параметры дескриптора файла терминала для stdin с помощью функции tcgetattr (). а затем отключает канонический флаг в структуре termios.
Причина ошибки? Когда скрипт вызывается, он запускается в неинтерактивном режиме, что означает, что tty-файл не подключен и, следовательно, он не доступен для процесса, вызванного из скрипта. Вот почему процесс возвращается ENOTTY.
Находясь в поиске ? Обходной путь, чтобы все еще быть в состоянии вызвать процесс из сценария без каких-либо изменений в программе? (Пробовал форсировать интерактивную оболочку, используя -i в скрипте, не работает !!!)
Спасибо...
источник