我正在学习shell语言。我创建了一个shell脚本,其功能是登录到DB并运行.sql文件。以下是脚本的内容 -
#!/bin/bash
set -x
echo "Login to postgres user for autoqa_rpt_production"
$DB_PATH -U $POSTGRESS_USER $Auto_rpt_production$TARGET_DB -p $TARGET_PORT
echo "Running SQL Dump - auto_qa_db_sync"
\\i auto_qa_db_sync.sql
运行上面的脚本后,我收到以下错误
./autoqa_script.sh: 39: ./autoqa_script.sh: /i: not found
在一篇文章之后,我试图反转斜杠,但它没有奏效。
我不明白为什么会这样。因为当我尝试手动运行sql文件时,它可以正常工作。有人可以帮忙吗?
答案 0 :(得分:4)
#!/bin/bash
set -x
echo "Login to postgres user for autoqa_rpt_production and run script"
$DB_PATH -U $POSTGRESS_USER $Auto_rpt_production$TARGET_DB -p $TARGET_PORT -f auto_qa_db_sync.sql
你在shell脚本中添加的行是(更多的,暂时让我们这样说),相当于你对Bash提示符的权利(如果你是root的话,以'$'或'#'结尾的行) )。执行脚本(命令列表)时,将在前一个命令终止后运行一个命令。
您要做的是运行客户端并在其中发出“\ i ./autoqa_script.sh”命令。
您所做的是运行客户端,在客户端终止后,在Bash中发出该命令。
您应该阅读有关Bash管道的信息 - 这些是在程序中运行程序和输入文本的方法。按照你最初解决问题的想法,你会写出类似的东西:
echo '\i auto_qa_db_sync.sql' | $DB_PATH -U $POSTGRESS_USER $Auto_rpt_production$TARGET_DB -p $TARGET_PORT
希望有助于理解。