मैं एक शेल स्क्रिप्ट में एक कमांड डालना चाहता हूं, जो डायरेक्टरी के लिए एक सिमलिंक बनाएगा, लेकिन इस स्क्रिप्ट को बार-बार चलाया जा सकता है, इसलिए बाद के इनवोकेशन पर, कमांड को कुछ भी नहीं बदलना चाहिए।
यहाँ निर्देशिका संरचना है:
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
मैं foo/
स्निपेट्स नामक एक सिम्प्लेक्स बनाना चाहता हूं जो निर्देशिका को इंगित करता है /tmp/test_symlink/repo/resources/snippets
।
तो मैं चला:
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
जो वांछित परिणाम देता है।
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
5 निर्देशिका, 5 फाइलें
हालाँकि, जब आदेश फिर से चलाया जाता है,
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
यह एक डायरेक्टरी के लिए एक सिम्लिंक बनाता है, जहां सिमलिंक एल्डी मौजूद है, सिम्लिंक को वास्तविक डायरेक्टरी के अंदर रखता है
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets -> /tmp/test_symlink/repo/resources/snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
ऐसा क्यों हो रहा है और मैं कमांड को कैसे संशोधित कर सकता हूं ताकि बाद के इनवोकेशन इस अजीब प्रभाव को पैदा न करें?
-n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory
।-T, --no-target-directory treat LINK_NAME as a normal file always
क्या आपको लगता है कि सिम्लिंक को हमेशा फ़ाइल के रूप में व्यवहार करना बेहतर है? मैंने सोचा होगा कि इन "विशेष" विकल्पों के उपयोग को सीमित करना बेहतर होगा?