Обходной путь для ENOTTY при запуске процесса c из скрипта?

1

В чем проблема? Получение ошибки ENOTTY при вызове функции tcgetattr (), когда процесс вызывается из скрипта. Ошибка появляется только при запуске из скрипта. Если он запускается из интерактивной оболочки, он работает нормально.

Что именно делает процесс? Процесс пытается отключить каноническую обработку ввода от стандартного ввода. Это необходимо, потому что входные данные могут поступать в виде пакетов и могут перегружать входную очередь. Для этого процесс получает параметры дескриптора файла терминала для stdin с помощью функции tcgetattr (). а затем отключает канонический флаг в структуре termios.

Причина ошибки? Когда скрипт вызывается, он запускается в неинтерактивном режиме, что означает, что tty-файл не подключен и, следовательно, он не доступен для процесса, вызванного из скрипта. Вот почему процесс возвращается ENOTTY.

Находясь в поиске ? Обходной путь, чтобы все еще быть в состоянии вызвать процесс из сценария без каких-либо изменений в программе? (Пробовал форсировать интерактивную оболочку, используя -i в скрипте, не работает !!!)

Спасибо...

Mohit
источник
Что делает процесс? Какие ioctls вызывают, по какой причине?
grawity
Процесс пытается получить параметры дескриптора файла терминала для stdin с помощью функции tcgetattr (). Эта функция возвращает ENOTTY. Я не хочу менять программу для процесса. поэтому сейчас я использую скрипт для вызова процесса в новом терминальном эмуляторе (xterm). Просто интересно, есть ли способ где-нибудь, где я не вынужден порождать еще один xterm?
Mohit
Позвольте мне перефразировать - Зачем процесс пытается это сделать? Он отображает интерактивный интерфейс или что-то? Кроме того, почему вы говорите «все сценарии не являются интерактивными» - вы говорите только о своей системе или о сценариях в целом?
grawity
Сделано необходимые правки. С надеждой.
Mohit