不太确定如何执行此操作但我需要从createdb获取输入,这是一个Ingres命令,并将其传递给包装器脚本中的变量,然后写入日志文件。
#!/usr/bin/bash
# createdb_wrapper.scr
# Log information about user of createdb.scr
#Install=`echo $II_SYSTEM`
#Default_Dir=$Install/ingres/DBA
#Database=`echo ingprenv II_DATABASE`
Default_Dir=/export/home/cwatts/test
Default_Log=DB.Audit
while [ -z "${fname}" ]
do
echo "Please, enter your Fullname [ENTER]:"
read fname
done
dbname=`bash createDB.scr | awk '{printf $1}'`
while [ -z "${desc}" ]
do
echo "Please,enter a brief Description [ENTER]:"
read desc
done
#Checks the directory exists, and creates if not
if [ ! -d $Default_Dir ] ;then
echo "directory doesn't exit, it will be created"
mkdir $Default_Dir
fi
echo `date` '|' $dbname '|' $fname '|' $desc >> $Default_Dir/$Default_Log
exit
答案 0 :(得分:0)
不太确定你要做什么。您是否尝试从createdb命令获取数据库名称?如果是这样,您可以在脚本中提示它,然后将其传递给您自己创建,例如:
read -p "Please enter a database name: " dbname
createdb ${dbname}
这有帮助吗?
更新:
我熟悉Ingres,已经使用了几十年左右;)所以你要尝试在createdb上放一个包装器。所以我上面的东西会起作用。但是,这将使用默认选项创建数据库。如果你想将其他选项传递给createdb,你也需要提示它们,但原则相同。
另一种方法是检查createdb的输出以获取数据库名称。该输出看起来像这样:
$ createdb pauldb
Creating database 'pauldb' . . .
Creating DBMS System Catalogs . . .
Modifying DBMS System Catalogs . . .
Creating Standard Catalog Interface . . .
Creating Front-end System Catalogs . . .
Creation of database 'pauldb' completed successfully.
因此,如果你只是将脚本的参数传递给使用$ *的createdb,然后grep输出"成功完成"那么你可以从中获取dbname,你的脚本将拥有与createdb本身相同的所有选项。
第二种方法的唯一缺点是,如果你有任何引用的参数,那么你可能会丢失引号,例如
createdb.wrapper "-u$ingres" newdb
变为
createdb -u$ingres newdb
并且$导致问题,这就是你首先引用它的原因(尽管我倾向于自己键入\ $ ingres)。
这对您来说可能不是问题。我编写了脚本,我已经解析了args寻找引号来重新添加它们,这很痛苦但可行(也许其他人有聪明的方法去做)。
HTH
答案 1 :(得分:0)
createdb
是一个行为与任何好程序一样的应用程序 - 当出现问题时,它以不为0的值退出。因此,只需检查包含退出状态的$?
BASH变量。先前执行的命令,并测试它是否等于0(一切正常),或者不是(出错)。