我在将环境变量(在我的中声明.bash_profile
)传递给执行 BTEQ 操作(在 Teradata 中)的批处理文件脚本时遇到了困难。
.bash_profile 包含:
export DBPASSWORD='password'
BATCH文件包含:
bteq < bteq_execution_test.sql > bteq_execution_test.log 2>&1 ${DBPASSWORD}
我检查了一下${DBPASSWORD}
,事实上,它被传递到了文件中 - 但它并没有被正确地接受为 BTEQ 脚本中的密码,它看起来像这样(登录部分出现错误):
.logon mydb/username,$4;
注意:我引用了${DBPASSWORD}
按位置设置密码的环境变量。如果有人可以帮忙,请告诉我。提前谢谢!
答案1
所以我找到了解决办法,无论在终端中运行的实际命令是什么,这个解决方案通常都能正常工作。我这样做的方法是创建一个“setup”批处理文件,该文件运行一堆“echo”命令并将它们写入第二个文件,以供 BTEQ 执行(在我的示例中)。下面是我解决问题的方法(请参考我原始帖子中的上下文):
bteq_execution_test_setup.bat:
rm bteq_execution_test_setup1.bat
echo '.LOGON mydb/username,' ${DBPASSWORD} ';' > bteq_execution_test_setup1.bat
echo 'insert into mydb.mytable select top 10 feature1, feature2 from mydb.another_table;' >> bteq_execution_test_setup1.bat
echo '.LOGOFF;' >> bteq_execution_test_setup1.bat
echo '.EXIT;' >> bteq_execution_test_setup1.bat
bteq < bteq_execution_test_setup1.bat > bteq_execution_test_setup1.log 2>&1
然后只需执行命令:
./bteq_execution_test_setup.bat
将使用 .bash_profile(或 .bashrc、.profile 等)中声明的所需环境变量执行命令(本例中为 BTEQ)。希望这对某些人有帮助,我在 Teradata 论坛上看到很多人问这个问题!