0

我正在创建一个 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

我尝试过echoprintf与管道结合使用,但它没有产生相同的结果,无论如何,它不起作用。贝娄是代码不起作用:

printf "${sys_password}\n${sys_password}\n" | \
    dbca -silent -createDatabase  -responseFile /assets/dbca.rsp

我想知道是否有另一种方法可以将printfecho输出仅发送到dbca STDIN一行

4

1 回答 1

2

通过tom的提示,我可以解决这个问题。此外,Charles Duffy给了我宝贵的顾问,让我的代码变得更好。感谢您的支持!这是最终代码:

printf "%s\n%s\n" "${sys_password}" "${sys_password}" | \
    dbca -silent -createDatabase -responseFile /assets/dbca.rsp 
于 2017-11-15T00:41:26.573 回答