0

我正在学习 shell 语言。我创建了一个 shell 脚本,其功能是登录数据库并运行一个 .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 文件时,它可以正常工作。任何人都可以帮忙吗?

4

1 回答 1

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

希望有助于理解。

于 2013-10-01T18:50:12.133 回答