shell - 在 unix 变量中获取 Teradata BTEQ 查询结果

标签 shell unix ksh teradata

我正在编写一个 shell 脚本,我需要将 Teradata 中的 BTEQ 查询结果转换为一个 unix 变量。

我试过了,

    testabcd=$(bteq << EOF 2>&1 >> $LOG_FILE
     .LOGON ${HOST}/${USER},${PASSWORD}
     DATABASE ${SRC_DB};
     .set width 2000;
      .set titledashes off;
     SELECT COUNT(*) FROM ${SRC_DB}.${SOURCE_TABLE};
    .LOGOFF;
    .QUIT;
    .EXIT
     EOF)

      echo "The count is: " $testabcd

查询成功运行,但未为变量分配输出。有什么建议吗?

最佳答案

问题是这个重定向:

2>&1 >> $LOG_FILE

这实际上意味着“将 stderr 和 stdout 发送到文件 $LOG_FILE”。由于 stderr 和 stdout 被重定向,该命令不会向 shell 发送任何输出,因此命令替换不会捕获任何内容。示例:

$ test=$(echo "Hello" 2>&1)
$ echo $test
Hello   // as expected
$ test2=$(echo "Hello" 2>&1 >> example.log)
$ echo $test2
        // is empty, as output has been redirected
$ cat example.log
Hello   // here is the redirected output

bteq 命令的输出将在 $LOG_FILE 中找到 - 如果您想将其保存在变量中,则需要删除重定向:

testabcd=$(bteq << EOF 2>&1 
....

关于shell - 在 unix 变量中获取 Teradata BTEQ 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841358/

相关文章:

bash - 案例声明没有捕获空字符串

linux - find -exec 中的命令替换

unix - 创建守护进程时执行双叉的原因是什么?

regex - Unix/Linux 在多个文件中查找和替换函数调用

linux - 找出以秒为单位的时间戳差异

regex - 提取模式之间的内容

linux - Bash 输入重定向为命令提供标准输入而不是参数/文件名?

multithreading - Go 是否可以在不为每个外部进程启动一个 OS 线程的情况下生成并与外部进程通信?

shell - 如何使用 ksh 提取可变长度子字符串

Linux 脚本在两台服务器的 ksh 上表现不同