@Caleb स्क्रिप्ट को सिम्लिंक के लिए परीक्षण करने के बारे में सही है। हालाँकि इसके बारे में क्यों छोड़ दिया गया था और मैं उत्सुक था। यदि आप कोरुटिल्स स्रोत कोड को देखते हैं और परीक्षण के आउटपुट को स्ट्रेस करते हैं, तो आप देख सकते हैं कि जब आप प्रतीकात्मक लिंक परीक्षण चलाते हैं तो यह lstat का उपयोग करता है और यदि आप -f परीक्षण का उपयोग करते हैं तो यह वास्तव में 'स्टेट' कहलाता है जो सिम्लिंक का अनुसरण करता है:
$ ln -s varnish_config XXX
$ strace -s 2000 test -L XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-L", "XXX"], [/* 47 vars */]) = 0
lstat("XXX", {st_mode=S_IFLNK|0777, st_size=14, ...}) = 0
$ strace -s 2000 test -L varnish_config 2>&1 | grep varnish
execve("/usr/bin/test", ["test", "-L", "varnish_config"], [/* 47 vars */]) = 0
lstat("varnish_config", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
$ strace -s 2000 test -f XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-f", "XXX"], [/* 47 vars */]) = 0
stat("XXX", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
स्टेट मैन पेज से:
stat() stats the file pointed to by path and fills in buf.
lstat() is identical to stat(), except that if path is a symbolic link,
then the link itself is stat-ed, not the file that it refers to.
इसका मतलब है कि -f परीक्षण तब तक सही होगा जब तक निर्दिष्ट फ़ाइलनाम एक नियमित फ़ाइल या एक नियमित फ़ाइल के लिए एक सिमलिंक है।
-eऔर-fहै कि गया था-eअगर (किसी भी प्रकार की) एक फ़ाइल अस्तित्व में पता करने के लिए इस्तेमाल किया गया था, और-fपरीक्षण करने के लिए विशेष रूप से किया गया है, तो फ़ाइल अस्तित्व में है और एक नियमित रूप से फ़ाइल था। ऐसा लगता है कि मुझे गलत समझ में आया कि एक "नियमित फ़ाइल" क्या थी