我正在创建一个 bash 脚本来自动化创建 Oracle 数据库的过程。基本上我想调用dbca
. 我已经找到了两种方法来做到这一点,但我仍然不喜欢这些解决方案。我只是想知道是否有更好的方法来做到这一点。
首先,我已经在脚本中定义了 sys_password
read -p -s "SYS Password: " sys_password
最简单的方法是使用密码创建一个临时文件并通过STDIN
.
echo $sys_password > /tmp/file_pwd.txt
echo $sys_password >> /tmp/file_pwd.txt
echo "" >> /tmp/file_pwd.txt
dbca -silent -createDatabase -responseFile /assets/dbca.rsp < /tmp/file_pwd.txt
但是,这种方法存在安全问题,因为我在文件系统中创建了一个包含敏感信息的物理文件,即使以某种方式删除它也可以恢复。
所以,我能想象的最好的解决方案是使用heredocs并通过管道将其传递给dbca
.
cat <<EOF | dbca -silent -createDatabase -responseFile /assets/dbca.rsp
${sys_password}
${sys_password}
EOF
我尝试过echo
并printf
与管道结合使用,但它没有产生相同的结果,无论如何,它不起作用。贝娄是代码不起作用:
printf "${sys_password}\n${sys_password}\n" | \
dbca -silent -createDatabase -responseFile /assets/dbca.rsp
我想知道是否有另一种方法可以将printf
或echo
输出仅发送到dbca
STDIN
一行