Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unix shell脚本中存在文件夹中文件的grep行时如何执行_Shell_Unix - Fatal编程技术网

unix shell脚本中存在文件夹中文件的grep行时如何执行

unix shell脚本中存在文件夹中文件的grep行时如何执行,shell,unix,Shell,Unix,给出以下示例: #!/bin/bash # var timeout = 5min. while ( ! grep "Start" /var/log/azure/Microsoft.Azure.Extensions.DockerExtension/{ver}/extension.log); do sleep 5 done echo "hello world" 在extension.log文件中找不到带有超时选项的行“start”时,如何更改脚本以使其循环 另外,它还应该考虑到,{ver

给出以下示例:

#!/bin/bash
# var timeout = 5min.
while ( ! grep "Start" /var/log/azure/Microsoft.Azure.Extensions.DockerExtension/{ver}/extension.log); do
    sleep 5
done

echo "hello world"
在extension.log文件中找不到带有超时选项的行“start”时,如何更改脚本以使其循环


另外,它还应该考虑到,{ver}不是静态的,并且是semver版本“2.3.4”等,它应该使用现有的最高版本文件夹。

除了BASH语法问题之外,其他问题都相当接近,因为条件在
(…)
中没有计算

这应该起作用:

logfile='/var/log/azure/Microsoft.Azure.Extensions.DockerExtension/{ver}/extension.log'

while ! grep -q "Start" "$logfile"; do
   sleep 5
done

echo "hello world"
测试代码:

#! /bin/bash
timeout=300 #seconds
now=$(date +%s)
let deadline=now+timeout 
log=/tmp/log.txt

while ( [ ! -f "$log" ] || (! grep "Start" $log) )
do
  if [ $(date +%s) -gt "$deadline" ]
  then
    echo "Timeout"
    break
  fi
  echo "Sleeping"
  sleep 3
done

echo "Done waiting"
只需更改
log
变量,它就会工作