代码之家  ›  专栏  ›  技术社区  ›  Christian Bongiorno

将命令系列划分为子流程似乎不起作用

  •  0
  • Christian Bongiorno  · 技术社区  · 3 年前

    我正试图从数据库中提取一些数据并监控其进度,因为提取数据的工具似乎没有这样做的机制。因此,我分叉命令链,然后继续计算输出文件的行数,直到它观察到预期的行数。

    问题是(我相信)我在正确地划分指挥链。而且,尽管数据确实在流动,但它并没有分叉,因为监视文件的代码没有执行。我错过了什么?

    我正在标记此 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
    

    我最终扼杀了这个过程,因为它没有像我预期的那样进行

    0 回复  |  直到 3 年前
    推荐文章