温馨提示:本文翻译自stackoverflow.com,查看原文请点击:bash - How to wait till a particular line appears in a file
bash shell unix

bash - 如何等到文件中出现特定行

发布于 2020-03-27 15:45:43

是否可以编写在给定的行出现在特定文件中之前不会继续执行的脚本?

例如,我想做这样的事情:

CANARY_LINE='Server started'
FILE='/var/logs/deployment.log'

echo 'Waiting for server to start'
.... watch $FILE for $CANARY_LINE ...
echo 'Server started'

基本上,是一个shell脚本,用于监视文件中的行(或正则表达式)。

查看更多

查看更多

提问者
pathikrit
被浏览
172
Xavier S. 2014-09-23 02:03

我们必须小心循环。

例如,如果您要检查文件以启动算法,则可能必须执行以下操作:

  FILE_TO_CHECK="/var/logs/deployment.log"
  LINE_TO_CONTAIN="Server started"
  SLEEP_TIME=10
  while [ $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") ]
  do
      sleep ${SLEEP_TIME}
  done

  # Start your algorithm here

但是,为了防止无限循环,您应该添加一些界限:

  FILE_TO_CHECK="/var/logs/deployment.log"
  LINE_TO_CONTAIN="Server started"
  SLEEP_TIME=10
  COUNT=0
  MAX=10
  while [ $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") -a ${COUNT} -lt ${MAX} ]
  do
      sleep ${SLEEP_TIME}
      COUNT=$(($COUNT + 1))
  done

  if [ ! $(cat FILE_TO_CHECK | grep "${LINE_TO_CONTAIN}") ]
  then
    echo "Let's go, the file is containing what we want"
    # Start your algorithm here
  else
    echo "Timed out"
    exit 10
  fi