From file(1) manpage: RETURN CODE file returns 0 on success, and non-zero on error. This seems to have broken on FreeBSD 10.1? $ uname -v FreeBSD 10.0-RELEASE-p10 #0: Mon Oct 20 12:42:25 UTC 2014 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC $ file thisdoesnotexist thisdoesnotexist: ERROR: cannot open `thisdoesnotexist' (No such file or directory) $ echo $? 1 $ uname -v FreeBSD 10.1-RELEASE-p5 #0: Tue Jan 27 08:55:07 UTC 2015 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC $ file thisdoesnotexist thisdoesnotexist: cannot open `thisdoesnotexist' (No such file or directory) $ echo $? 0
It looks like this is intentional, from upstream file(1)/magic(5). The '-E' option was added in February 2014, which predates the last file(1) update, which according to the manual page: -E On filesystem errors (file not found etc), instead of handling the error as regular output as POSIX mandates and keep going, issue an error message and exit. It is not clear to me why this change was made, but it appears to be that the previous '1' exit code observed on the 10.0-RELEASE machine was returned by stat(2), not file(1).