繁体   English   中英

更好的选择,通过带有'\\ n'的stdin传递变量

[英]Better alternative to pass variables via stdin with '\n'

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

有了tom的提示,我可以解决这个问题。 另外, 查尔斯·达菲Charles Duffy)给了我宝贵的顾问,以使代码更好。 感谢您的支持! 这是最终代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM