如何在 bash 脚本中执行 docker sqlplus 查询?

how to execute docker sqlplus query inside bash script?

在 Ubuntu 21.04,我从 docker 安装了 oracle dtb,工作正常我正在为 sql 开发人员使用它,但现在我需要在 shell 中使用它脚本。我不确定它是否可以以这种方式工作,或者是否有更好的方式。我正在尝试 运行 简单的脚本:

#!/bin/bash
SSN_NUMBER="${HOME}/bin/TESTS/sql_log.txt"
select_ssn () {
        sudo docker exec -it oracle bash -c "source /home/oracle/.bashrc; sqlplus username/password@ORCLCDB;" <<EOF > $SSN_NUMBER
        select SSN from employee
        where fname = 'James';
        quit
EOF
}

select_ssn

在我 运行 之后,没有任何反应,我需要终止会话。或

the input device is not a TTY

显示

从外部指定此处文档 Docker 是有问题的。尝试将查询命令内联到 Bash 命令行中。请记住,bash -c 的字符串参数可以是任意复杂的。

docker exec -it oracle bash -c "
    source /home/oracle/.bashrc
    printf '%s\n' \
        \"select SSN from employee\" \
        \"where fname = 'James';\" |
    sqlplus -s username/password@ORCLCDB" > "$SSN_NUMBER"

我拿出了 sudo 但也许你真的需要它。基于快速浏览手册页,我将 -s 选项添加到 sqlplus

这里的引用很复杂,我不完全确定它不需要额外的调整。我在 shell 脚本周围加上双引号,这意味着这些引号内的某些内容将在传递给容器之前由调用 shell 处理。

在最坏的情况下,如果查询本身是静态的,那么在构建时将其存储在图像中的文件中将是提供最少惊讶的路径。