Clone
1
SC3064
Vidar Holen edited this page 2025-04-11 15:25:41 -07:00

In POSIX sh, test -N is undefined.

Problematic code:

if [ -N file ]
then
  echo "File has been modified since last read"
fi

Correct code:

if bash -c '[ -N file ]'
then
  echo "File has been modified since last read"
fi

Rationale:

test -N is not supported by POSIX, and there is no straight forward way of simulating it. If you need this functionality, look into which non-POSIX features your system has to allow this. stat -c, find -printf, bash, ksh, and Python are all possible options.

Note that atime did not turn out to be as useful as first imagined in 1970, and it's generally better not to rely on it.

Exceptions:

None. If you expect your shell to support test -N, either explicitly specify it in the shebang, use a # shellcheck shell=bash directive, or ignore this warning.

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!