|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [Patch] fix canonicalize-existing vbd file
Keir Fraser writes ("Re: [Xen-devel] [Patch] fix canonicalize-existing vbd
file"):
> Do you mean to 'test -f "$file"'? A symlink will always fail 'test -f', and
> $p can be a symlink.
test -f calls stat(2) rather than lstat(2) and only falls back to the
latter if the former fails. So if the argument is a link which can be
dereferenced, test -f tells you whether the link target is a file.
If you want to know whether $file is a file or a symlink to a file
test -f "$file"
precisely wrong as it is true in both those cases.
See
http://www.opengroup.org/onlinepubs/009695399/utilities/test.html
which says
With the exception of the -h file and -L file primaries, if a
file argument is a symbolic link, test shall evaluate the
expression by resolving the symbolic link and using the file
referenced by the link.
It's actually true, too:
mariner:~/junk> touch a
mariner:~/junk> ln -s a b
mariner:~/junk> test -f a && echo file
file
mariner:~/junk> test -f b && echo file
file
mariner:~/junk> test -L b && echo link
link
mariner:~/junk> ln -s enoent c
mariner:~/junk> test -f c && echo file
mariner:~/junk> test -L c && echo link
link
mariner:~/junk>
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|