bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: file access time and file modification time


From:
Subject: Re: file access time and file modification time
Date: Tue, 9 Jul 2019 11:16:16 +0100

Hi Mischa,

On Tue, 09 Jul 2019 09:05:45 +0200
Mischa Baars <mjbaars1977.bug-bash@cyberfiber.eu> wrote:

> Hi Kerin,
> 
> That indeed solves the problem in 'accesstime.sh', although I would recommend 
> some sort of reference from the bash manpage to the mount manpage.
> 
> Did you have a look at the 'conditional.sh' script too? Looks like the '-N' 
> switch compares only the integer part of the timestamp seconds.

The stat structure supports timestamp fields of nanosecond granularity since 
POSIX.1-2008, so it should work. I tried a simple test case here, and the 
behaviour of -N seems generally broken:

# f=$(mktemp); [[ -N $f ]]; echo $?; touch -m "$f"; [[ -N $f ]]; echo $?
0
0

I expected the value of $? to be non-zero at first, followed by 0 after 
updating the mtime. Using the test command that ships with GNU coreutils 
(v8.31) exhibits the same problem:

# f=$(mktemp); command test -N "$f"; echo $?; touch -m "$f"; command test -N 
"$f"; echo $?
0
0

That was with ext4 as the filesystem backing the TMPDIR. I also tested 
FreeBSD/UFS, with the same results, even if sleeping one second before updating 
the mtime. Perhaps Chet would be so kind as to clarify what's going on here. In 
the meantime, your technique of comparing the timestamps lexicographically 
seems like a good workaround, although you should use [[ instead. For example:

# check() { local at=$(stat -c %x "$1") mt=$(stat -c %y "$1"); [[ $mt > $at ]]; 
}
# f=$(mktemp); check "$f"; echo $?; touch -m "$f"; check "$f"; echo $?
1
0

-- 
Kerin Millar <kfm@plushkava.net>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]