2013-07-27 38 views
0

我不知道是否奇怪,讀取沒有從終端輸入。讀取命令沒有從終端輸入

在源代碼製作過程中使用的配置腳本應該要求用戶給出輸入來選擇數據庫的類型,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

'read in >>/tmp/error.log'發出了什麼? – pts

+0

@pts nothing,空文件 – sach

+0

我認爲你已經省略了一些來自中間的代碼,它們重定向了stdin。例如,將'exec pts

回答

2

最有可能的read使用已達到EOF的文件重定向的標準輸入執行。如果以上內容不是整個配置代碼,請檢查是否沒有輸入重定向。上面的代碼可能是一個函數的一部分,它是通過管道或文件的某些輸入來調用的?否則,請檢查configure如何執行 - 是否有重定向?

否則,通用建議適用:嘗試簡化並剝離代碼,直到它明顯發生了什麼。

順便說一句,如果你想讓你的程序打包進行發佈,那麼配置交互就不是一個好主意 - 控制交互程序的執行並不容易。考慮添加對通過命令行選項提供參數的支持。