【问题标题】:running db2 in bash from git's mingw on windows在 Windows 上从 git 的 mingw 在 bash 中运行 db2
【发布时间】:2016-02-23 18:09:17
【问题描述】:

我有一个 shell 脚本,它运行一些我想在 Windows 上使用的 db2 命令。 从 msysgit 2.5.3 64bit 在 bash 中运行它时,我从 db2 收到错误:

SQL1024N Die Verbindung zur Datenbank ging verloren。 SQLSTATE=08003

例如 用db2cmd 启动db2 然后, 从 db2cmd 窗口启动 bash, 然后运行

db2 connect to <db> user <user>
db2 select * from syscat.tables

db2 select 会产生同样的错误。

发生这种情况是因为 bash 将启动另一个子 shell 来执行每个 db2 命令,并且 db2 connect 调用另一个进程 db2bp 实际持有该连接。 当 db2 connect 返回时,子 shell 关闭并且连接丢失。 当我将命令与 ; 连接时也会发生这种情况或 &&。

有没有办法让 bash 不执行子 shell 或至少不执行每个命令?

【问题讨论】:

  • 您是否尝试过将所有语句放入一个文件中,然后将该文件传递给“db2”命令?参数“-f 文件名”可用于将输入文件传递给 DB2。
  • 这在我的情况下不起作用,因为我在脚本中使用了这些语句的结果。原因是双重的。 1. 我会在 db2 结果中获得连接和连接重置消息,之后我需要解析出我不想解析的消息。 2. 我正在使用不同的选择,我还需要区分其结果。

标签: windows bash db2 mingw


【解决方案1】:

防止产生新外壳的常用方法是在每个命令前加上一个点(一些参考例如here)。您还可以检查 shell 内置的 exec 命令。但是,我担心在 Windows 中运行 shell 会有它自己的奇怪之处,至少从我自己的经验来看,所以你可能想尝试不同的 shell 风格,然后才能找到正确的解决方案。无论如何希望它有所帮助!

【讨论】:

  • dot 方法仅适用于调用脚本,而 db2 可执行文件不是。 exec 命令做了一些完全不同的事情,它执行一个替换当前 shell 的命令。
【解决方案2】:

对于 Bash 中的脚本,您应该在连接字符串之后添加这个小错误: 导出 DB2DBDFT= 这将确保所有其他子 shell 都将使用您的 db2 连接。 希望这能解决您的问题。

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2015-02-22
    • 2018-03-04
    • 2021-09-04
    • 1970-01-01
    • 2019-01-05
    • 2020-09-06
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多