如何调试bash脚本,该脚本可编译并启动Go应用程序,但由我的IDE而不是在终端中执行

时间:2019-06-20 14:02:41

标签: bash go intellij-idea jetbrains-ide goland

对于我的Go应用,我需要按以下顺序运行几件事:

  1. 编译Go应用

go install appName

  1. 在Go应用的可执行文件上运行nrsc

./nrsc <path to executable> <path to static sources>

  1. 运行应用可执行文件

./appName -config <path to file>

我的IDE允许我运行Bash脚本。脚本如下所示,用户是我的用户名,但已检查stackoverflow:

#!/bin/bash
go install appName
/home/user/go/bin/nrsc /home/user/go/bin/appName /home/user/go/src/appName/static
/home/user/go/bin/appName -config /home/user/go/src/appName/config/local.conf

在我的终端中从任何目录执行该脚本时,该脚本都能运行并正常运行。当直接在终端中单独键入命令时,所有命令也都起作用。 Go应用程序不会在终端中产生任何输出,也不应该产生任何输出,只是坐在终端中的空行上,直到我按CTRL + C退出它为止。但是它仍然应该在我的浏览器中某个端口上的localhost上运行。

当脚本通过我的IDE运行时,它仅以代码1退出。但是,如果我在每行之前和之后放置echo语句以进行调试,则它们都将成功打印(因此每行都将执行),并且脚本退出代码为0。此外,如果我将sleep 10放在脚本的末尾,则即使该语句位于应该运行我的应用程序的行之后,它也肯定会到达该语句并休眠。

由于该应用程序不产生任何输出,因此我不知道为什么它不起作用。我该如何调试?

1 个答案:

答案 0 :(得分:0)

通常,我在bash脚本的开头放置一个“ set -x”,以获取有关在脚本失败的地方执行所有语句的更多信息。但这只会让您知道您的bash脚本在go应用程序没有失败的地方。

#!/bin/bash
set -x
#<your program>

要正确调试bash脚本,可以使用bash调试器工具 bashdb 。您也可以使用它。 在这里可以找到调试器。 链接:http://bashdb.sourceforge.net/

否则,如果您在Go应用程序中遇到问题,则需要首先使用任何可用于go的调试器调试go应用程序。您可以使用IDE的调试器,也可以安装Delve并使用它。我个人使用Delve调试go程序。

希望有帮助!