无法从bash运行postgresql脚本

时间:2013-10-01 18:44:31

标签: sql bash postgresql shell

我正在学习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文件时,它可以正常工作。有人可以帮忙吗?

1 个答案:

答案 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

希望有助于理解。