Permalänk
Medlem

script fråga

Har lite problem med att skapa ett skript.

Det jag skulle vilja göra är att se om en fil blivit uppdaterat och om den har det så ska den fortsätta och om inte så ska scriptet avslutas.

Hur gör jag detta enklast i ett shell-script?

Permalänk
Medlem

Jag ser två olika sätt som du skulle kunna göra det på, antingen genom att kolla mtime, `stat -c%Y $FILEN`, eller i slutet av skriptet göra en kopia av filen, för att sedan typ:
if [ `diff $FILEN $KOPIAN | wc -l` = 0];then avsluta skriptet; fi

Permalänk
Medlem

personligen kör jag med en hash för filen som jag vill hålla koll på, har detta lagt i en smidig fil som jag kan sourca in i script om jag behöver den för att jag använder det så pass mycket men i korthet:

#!/bin/sh LOCAL_HASH="~/.hash" HASH=`/sbin/md5 -q $FILE` OLD_HASH=`cat $LOCAL_HASH` if [ "x$HASH" = "x$OLD_HASH" ]; then exit 0 else echo "wooho, file change" echo $HASH > $LOCAL_HASH fi

klippte ut detta ur det script som jag har och är för lat för att kolla att jag inte missat ngt tecken eller så, men det ger ju en bild om hur det är tänkt..

Permalänk
Medlem

ntity: riktigt snygg lösning!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av ntity

if [ "x$HASH" = "x$OLD_HASH" ]; then

Vad gör x:en framför variablerna?

Permalänk
Medlem

x före variablerna hindrar ett vanligt fel i sh script, en jämförelse så som:

= sometext

är ett fel som kommer att stoppa scriptet med "[: =: unexpected operator", medans med x blir jämförelsen:

x = xsometext

vilket är ett fullt fungerande logiskt uttryck, och false precis som tänkt.

PS. anledningen jag använder hash är för att det passar mot allt, en url, en textfil eller en binär osv..