我正在创建一个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
一行
答案 0 :(得分:2)
根据tom的提示,我可以解决这个问题。此外,Charles Duffy为我提供了有价值的顾问,使代码更好。感谢您的支持! 这是最终的代码:
printf "%s\n%s\n" "${sys_password}" "${sys_password}" | \
dbca -silent -createDatabase -responseFile /assets/dbca.rsp