![](/img/trans.png)
[英]Pass a script with arguments via stdin as a string to the bash
[英]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
我已经试过echo
和printf
结合管,但它并没有产生相同的结果,无论如何,这是行不通的。 波纹管是不起作用的代码:
printf "${sys_password}\n${sys_password}\n" | \
dbca -silent -createDatabase -responseFile /assets/dbca.rsp
我想知道是否有另一种方式可以在一行中将printf
或echo
输出发送到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.