我正试图从数据库中提取一些数据并监控其进度,因为提取数据的工具似乎没有这样做的机制。因此,我分叉命令链,然后继续计算输出文件的行数,直到它观察到预期的行数。
问题是(我相信)我在正确地划分指挥链。而且,尽管数据确实在流动,但它并没有分叉,因为监视文件的代码没有执行。我错过了什么?
我正在标记此
sqlplus
以防那个社区的人知道如何在本地做到这一点
#!/usr/bin/env zsh
set -e
set -o pipefail
set -x
set -m
function extract() {
local from="${1:?You must supply a query from date as 'YYYY-MM-DD HH24:MI:SS'}"
local to="${2:?You must supply a query from date as 'YYYY-MM-DD HH24:MI:SS'}"
local u="${3:-${OMC_USERNAME:?no db username supplied}}"
local p="${4:-${OMC_PASSWORD:?No db password supplied}}"
local workdir records
workdir="$(mkWorkdir "${from}" "${to}")"
records=$(sqlplus -s "$u/$p@sredb1_high" @getdata.sql "${from}" "${to}" | tail +2 | tr -d ' ')
# the first 2 lines are skipped because, apparently, when we do variable substitution, it lets us know
# on stdout and not stderr
(sqlplus -s "$u/$p@sredb1_high" @getdata.sql "${from}" "${to}" | tail +2 > "${workdir}/data.psv") &
local process=$!
local count="0"
until [ "${count}" -eq "${records}" ]; do
count=$(wc -l "${workdir}/data.psv")
printf '%.2f%%\r' $((count / records))
sleep 5
done
wait $process
}
输出(您看到的一些执行是否是由于将此代码加载到另一个脚本中,但我认为它不相关):
./omc.sh extract '2023-05-01 00:00:00' '2023-05-01 23:59:59'
+ [[ 3 == 0 ]]
++ dirname ./omc.sh
+ source ./commands/extract.sh
++ set -e
++ set -o pipefail
++ set -x
++ set -m
+ extract '2023-05-01 00:00:00' '2023-05-01 23:59:59'
+ local 'from=2023-05-01 00:00:00'
+ local 'to=2023-05-01 23:59:59'
+ local u=uuu
+ local p=pppp
+ local workdir records
++ mkWorkdir '2023-05-01 00:00:00' '2023-05-01 23:59:59'
++ local 'from=2023-05-01 00:00:00'
++ local 'to=2023-05-01 23:59:59'
++ isDate '2023-05-01 00:00:00'
++ grep -Eq '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
++ isDate '2023-05-01 23:59:59'
++ grep -Eq '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
++ local workdir=2023-05-01-00:00:00_2023-05-01-23:59:59
++ test -d 2023-05-01-00:00:00_2023-05-01-23:59:59
++ echo 2023-05-01-00:00:00_2023-05-01-23:59:59
+ workdir=2023-05-01-00:00:00_2023-05-01-23:59:59
++ sqlplus -s uuu/pppp#@sredb1_high @getdata.sql '2023-05-01 00:00:00' '2023-05-01 23:59:59'
++ tail +2
++ tr -d ' '
^C^C^C^C^C^D
我最终扼杀了这个过程,因为它没有像我预期的那样进行