bash 脚本中的“until $@”到底是如何工作的?

bash 脚本中的“until $@”到底是如何工作的?

我最近得到了一个主机,其中 java 应用程序以这种方式启动:

/bin/bash ./restarter.sh java <lot of java params>

它确保如果应用程序终止,则restarter.sh再次运行它。

有以下内容restarter.sh

#!/bin/bash
until "$@"; do
  echo "Server crashed with exit code $?.  Respawning.." >&2
  sleep 1
done

请帮助我了解它是如何工作的。

答案1

这意味着循环直到命令(“$@”)完成执行并退出代码为0。

例子:

$ until (echo Myprog ; sleep 1; exit 1;); do echo Error respawning ...; done
Myprog
Error respawning ...
Myprog
Error respawning ...
Myprog
^C

$ until (echo Myprog ; sleep 1; exit 0;); do echo Error respawning ...; done
Myprog

分析你的脚本: 通常,编写良好的应用程序会在成功完成时以零退出代码退出,否则以非零退出代码退出。在您的情况下,您正在使用 Until 命令来继续重新启动应用程序:

java <lot of java params> 

直到应用程序成功完成其执行(退出代码为零)。

相关内容