Bash 如何从shell脚本检查文件中内容的更改
我不熟悉shell脚本,我需要不断检查date_trigger.txt文件中的日期更改 date_trigger.txt的内容如下: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文件,一旦发现
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文件,一旦发现日期已更新为当前日期,则退出代码。确定,您可以尝试从!=
到=
看看它能把你带到哪里。这样我就得到了我的当前日期,即使是不匹配的日期。