我正在编写一个 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/