如何在 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 处理。
在最坏的情况下,如果查询本身是静态的,那么在构建时将其存储在图像中的文件中将是提供最少惊讶的路径。
在 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 处理。
在最坏的情况下,如果查询本身是静态的,那么在构建时将其存储在图像中的文件中将是提供最少惊讶的路径。