我不知道读取是否从终端获取输入是否奇怪。
在源代码制作过程中使用的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
但是,read命令不是要求用户输入。它未能从标准输入中获取输入。
When I checked the status of the command in the error.log it was showing
1
1
有人能说出为什么读取无法从stdin获取输入。 是否有任何内置变量可以阻止读取输入?
答案 0 :(得分:2)
最有可能read
使用从已达到EOF的文件重定向的标准输入执行。如果以上不是您的整个配置代码,请检查没有输入重定向。上面的代码可以是一个函数的一部分,该函数是通过管道或文件的一些输入调用的吗?否则检查如何执行configure - 是否有重定向?
否则,通用建议适用:尝试简化和删除代码,直到明显发生了什么为止。
顺便说一句,如果你想让你的程序打包用于分发,那么使配置交互不是一个好主意 - 控制交互式程序的执行并不容易。考虑通过命令行选项添加对提供参数的支持。