Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/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
Bash 如何从shell脚本检查文件中内容的更改_Bash - Fatal编程技术网

Bash 如何从shell脚本检查文件中内容的更改

Bash 如何从shell脚本检查文件中内容的更改,bash,Bash,我不熟悉shell脚本,我需要不断检查date_trigger.txt文件中的日期更改 date_trigger.txt的内容如下: trigger_date, value 17/03/2021, v1 脚本(fetch_date.sh)应该等到date_trigger.txt中的日期(17/03/2021)没有更改为当前日期。date_trigger.txt将由另一个具有当前日期的脚本更新,因此fetch_date.sh脚本的想法/需要是不断检查date_trigger.txt文件,一旦发现

我不熟悉shell脚本,我需要不断检查date_trigger.txt文件中的日期更改

date_trigger.txt的内容如下:

trigger_date, value
17/03/2021, v1
脚本(fetch_date.sh)应该等到date_trigger.txt中的日期(17/03/2021)没有更改为当前日期。date_trigger.txt将由另一个具有当前日期的脚本更新,因此fetch_date.sh脚本的想法/需要是不断检查date_trigger.txt文件,一旦发现该日期已更新为当前日期,则退出代码

我已经为此编写了一个基本的shell脚本,如下所示,但到目前为止运气不佳:

#! /bin/bash

sys_cur_date=$(date +"%d/%m/%Y")
while IFS=, read -r trigger_date value
  do
    while [ $sys_cur_date != $trigger_date ]; do
      echo " Where is my current date ?"
    done
      echo "I got my current date "
      break
  done < date_trigger.txt
#/bin/bash
系统当前日期=$(日期+%d/%m/%Y)
当IFS=时,read-r触发\u日期值
做
而[$sys\u cur\u date!=$trigger\u date];做
echo“我当前的约会对象在哪里?”
完成
echo“我有我现在的约会对象”
打破
完成
您可以在无限
循环中添加睡眠,就像这样

#!/usr/bin/env bash

sys_cur_date=$(date +"%d/%m/%Y")

while :; do
  IFS=, read -r trigger_date value < <(tail -n1 date_trigger.txt)
  if [[ $sys_cur_date != "$trigger_date" ]]; then
    printf "Where is my current date %s\n" "$trigger_date"
  else
    printf "I got my current date %s\n" "$trigger_date"
    break
  fi
  sleep 1
done
#/usr/bin/env bash
系统当前日期=$(日期+%d/%m/%Y)
while:;做

如果s=,read-r trigger_date value<我让它工作了,请参见下面的代码。我认为-n1 in-tail命令产生了一个问题,不确定这是键入错误还是实际语法

#! /bin/bash
#fetch system current date
sys_cur_date=$(date +"%d/%m/%Y")

while IFS=, read -r trigger_date value < <(tail -1 date_trigger.txt)
  do
  if [[ $sys_cur_date == $trigger_date ]]; then
    echo "I got my current date"
    break
    #using break statement to control infinte loop here.
  else
    echo $trigger_date
    echo "Where is my current date ?"
  fi
done < date_trigger.txt
#/bin/bash
#获取系统当前日期
系统当前日期=$(日期+%d/%m/%Y)

当IFS=时,read-r触发器的日期值<引号很重要<代码> > [ $ $ssixCuryDeal]!=“$TrutGyDeDATE”<代码>或具有空格的日期将无法工作(将以一个大错误消息失败,或取决于内容是什么,甚至可能错误地返回true)…例如,考虑您的<代码> TutGeldDATE < /COD> <代码> 1 O 1=1 < /代码> -这将使其成为“<代码> >[17/03/2021!=1-01=1]
;因为“-o”是“或”而且
1=1
是真的,即使它是一个完全不同的日期值也是真的;当你正确引用扩展名时,错误就会消失。顺便说一句,
sh
标记应该用于
#!/bin/sh
脚本,而不是
#!/bin/bash
脚本;它们是两种不同的语言(如C和C++)我执行了这段代码,当date_trigger.txt的日期与系统日期不一致时,一直打印我的当前日期在哪里。但如果在执行期间我将date_trigger.txt文件的内容从旧日期更改为当前日期,则不会执行任何操作。我不确定是否遗漏了任何内容,这与您的脚本尝试执行的基本相同。如果我理解是的,睡眠确实派上了用场。但我试图解决的问题是,脚本(fetch_date.sh)应该等到日期(2021年3月17日)inside date_trigger.txt未更改为当前日期。date_trigger.txt将由另一个具有当前日期的脚本更新,因此fetch_date.sh脚本的想法/需要是继续检查date_trigger.txt文件,一旦发现日期已更新为当前日期,则退出代码。确定,您可以尝试从
!=
=
看看它能把你带到哪里。这样我就得到了我的当前日期,即使是不匹配的日期。