当子进程终止时,Bash脚本输出“Info :: not found”

时间:2014-01-07 18:06:22

标签: bash

我有这个脚本

#!/bin/sh

echo `pwd`

until `sh ./launch_starbound_server.sh`; do
  echo "Server crashed $?" >> Crash.log
done

当我运行它并终止进程“launch_starbound_server”时,它会在终端输出:

Killed
monitor.sh: 5: monitor.sh: Info:: not found

Crash.log确实包含文本。奇怪的是,这个过程确实开始了。过了一段时间,整个过程似乎崩溃而不是无限循环。

修改

我正在运行的服务器通常会在某些时候崩溃,而且很难说出原因。但更清楚的是,我要做的是创建一个脚本,每次崩溃时都会召唤下标。

让脚本在循环内运行并在脚本崩溃时更改条件可能是解决问题的一种方法。

EDIT2

我将脚本更改为:

#!/bin/sh

cd /home/sybiam/starbound/starbound/linux64

while true
do
  ./launch_starbound_server.sh
  echo "Server crashed $?" >> Crash.log
  sleep 1
done

我认为它应该可行,睡眠方法是在启动新服务器实例之前给操作系统腾出时间来释放套接字。反击可能是问题所在。

1 个答案:

答案 0 :(得分:2)

问题是这个命令

sh ./launch_starbound_server.sh`

正在子shell中运行(通过反引号)。它将一个字符串输出到stdout。我们说字符串是:

Info: foo bar baz

所以你有效地运行:

until Info: foo bar baz; do
  …
done

这解释了通知。我无法告诉你实际上是什么杀了剧本 - 你需要在问题中加入更多细节来解决这个问题。