使用'\ n'

时间:2017-11-14 23:41:45

标签: bash stdin dbca

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

1 个答案:

答案 0 :(得分:2)

根据tom的提示,我可以解决这个问题。此外,Charles Duffy为我提供了有价值的顾问,使代码更好。感谢您的支持! 这是最终的代码:

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