2013-07-27 3 views
0

Я не знаю, странно ли, что чтение не берет вход с терминала.команда чтения не принимает вход с терминала

Сценарий configure, который используется в процессе создания исходного кода, должен попросить пользователя дать ввод для выбора типа базы данных MYSQL или ORACLE (ниже - код).

MYSQLLIBPATH="/usr/lib/mysql" 
echo "Enter DataBase-Type 1-ORACLE, 2-MySQL (default MySQL):" 
read in 
echo $? >> /tmp/error.log 
if test -z "$in" -o "$in" = "2" 
then 
     DATABASE=-DDB_MYSQL 
     if true; then 
    MYSQL_TRUE= 
    MYSQL_FALSE='#' 
else 
    MYSQL_TRUE='#' 
    MYSQL_FALSE= 
fi 

     echo "Enter Mysql Library Path: (eg: $MYSQLLIBPATH (default))" 
     read in 
     echo $? >> /tmp/error.log 
     if test -n "$in" 
     then 
       MYSQLLIBPATH=`echo $in` 
     fi 
     echo "Mysql Lib path is $MYSQLLIBPATH" 
else 
     if false; then 
    MYSQL_TRUE= 
    MYSQL_FALSE='#' 
else 
    MYSQL_TRUE='#' 
    MYSQL_FALSE= 
fi 

     DATABASE=-DDB_ORACLE 
     LD_PATH= 
fi 

Но команда чтения не запрашивает ввод пользователя. Его неспособность принять вход от stdin.

When I checked the status of the command in the error.log it was showing 
1 
1 

Может ли кто-нибудь сказать, почему чтение не принимает входные данные от stdin. Есть ли встроенная переменная, которая может блокировать чтение с ввода?

+0

Что читает в/tmp/error.log' emit? – pts

+0

@pts ничего, пустой файл – sach

+0

Я думаю, что вы опустили некоторый код из середины, который перенаправляет stdin. Например, добавление 'exec pts

ответ

2

Скорее всего read выполняет со стандартным вводом, перенаправленным из файла, достигшего EOF. Если приведенный выше не весь код конфигурации, проверьте, нет ли перенаправления ввода. Может ли указанный выше код быть частью функции, которая была вызвана с помощью какого-либо ввода из канала или файла? В противном случае проверьте, как выполняется configure - есть ли какие-либо переадресации?

В противном случае применяются универсальные рекомендации: попробуйте упростить и удалить свой код, пока не станет очевидно, что происходит.

BTW, не рекомендуется настраивать интерактивный интерфейс, если вы хотите, чтобы ваша программа была упакована для распространения - управлять выполнением интерактивных программ непросто. Попробуйте добавить поддержку для подачи параметров через параметры командной строки.

Смежные вопросы