是否可以编写在特定文件中出现给定行之前不会继续的脚本?
例如,我想做这样的事情:
CANARY_LINE='Server started'
FILE='/var/logs/deployment.log'
echo 'Waiting for server to start'
.... watch $FILE for $CANARY_LINE ...
echo 'Server started'
基本上,一个 shell 脚本,它监视文件的行(或正则表达式)。
小智 19
tail -f path_to_my_log_file.log | sed '/particular_line/ q'
q您可以在通过 解析输入时使用该标志sed。然后一旦出现sed就会中断。tailServer started/var/logs/deployment.log
  tail -f /var/logs/deployment.log | sed '/Server started/ q'
做同样事情的另一种方法
  ( tail -f -n0 /var/logs/deployment.log & ) | grep -q "Server Started"
上一个答案(有效,但不如这个有效)
我们必须小心循环。
例如,如果您想检查文件以启动算法,您可能必须执行类似的操作:
  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
| 归档时间: | 
 | 
| 查看次数: | 4876 次 | 
| 最近记录: |