【问题标题】:Git bash and sqlcmdGit bash 和 sqlcmd
【发布时间】:2022-08-22 19:21:06
【问题描述】:

我在 git bash 中使用 shell 脚本来调用 sqlcmd 来运行一些 sql 脚本。脚本名是根据git分支名,所以命令是sqlcmd -E -S mySQLServer -d myDB \"$分支sql\"

它在命令行中运行良好,但我想对几个 git 分支重复它,所以我有一个脚本可以调用这个脚本来获取分支列表:

While read branch
do
  . C:/sqlScript.sh $branch
done < \"$1\"

带有分支列表的文件在 $1 中传递

发生的情况是从列表中读取第一个分支,但永远不会移动到下一个分支。它重复执行 $branch 中具有相同值的 sqlScript.sh。

如果我将 sqlScript 更改为仅回显 $1,则一切都按预期工作。当我调用 sqlcmd 时,仅通过第一个分支。 那么为什么 sqlcmd 会把事情搞砸呢?

  • 顺便说一句:此时这与 Git 无关,它纯粹是 bash。 \"Git-bash\" 只是 Windows 的 bash 端口,它包含在 Git-for-Windows 中,因为 Git 需要 POSIX 样式的 shell,而 bash 是免费的。

标签: bash shell scripting sqlcmd


【解决方案1】:

删除前导点,调用 C:/sqlScript.sh ... 而不是 . C:/sqlScript.sh ...


. scripts.shsource script.sh 的缩写:它将在当前 shell 中执行 script.sh 中列出的命令。如果您有诸如exit 之类的命令,它将退出当前shell。

常规调用将启动一个单独的 shell,它不会与您当前的 shell 混淆。

【讨论】:

  • 谢谢,但执行任何一种方式都有相同的结果。这是执行 sqlcmd 时的具体问题。该脚本可以调用 git checkout 和 git pull 并且适用于每个分支,但是如果脚本调用 sqlcmd,它会卡在第一个分支上
  • 您将不得不进一步调试:您可以在循环的开头添加echo $branch,并在sqlScript.sh 的顶部添加echo $1
  • 如果我在脚本中放置 echo 语句,我所看到的只是确认问题在于对 sqlcmd 的调用。对 sqlcmd 的调用似乎做了某种重置,使调用脚本重复读取列表中的第一个分支。调用 sqlcmd 后,所有 echo 语句都显示第一个分支的名称。
【解决方案2】:

我通过在使用命令调用 sqlcmd 之前修复它,以便它为每次迭代启动一个新的 command.com。

sqlcmd -E -S myServer -d myDB -i $branch.sql 

Command sqlcmd -E -S myServer -d myDB -I $branch.sql

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 2017-08-31
    • 2018-06-20
    • 2014-04-27
    • 2017-05-08
    • 1970-01-01
    • 2015-06-01
    • 2019-11-05
    相关资源
    最近更新 更多