ฉันต้องการใส่คำสั่งลงในเชลล์สคริปต์ซึ่งจะสร้าง symlink ไปยังไดเรกทอรี แต่สคริปต์นี้สามารถเรียกใช้ซ้ำแล้วซ้ำอีกดังนั้นในการเรียกใช้ครั้งต่อไปคำสั่งไม่ควรเปลี่ยนแปลงอะไร
นี่คือโครงสร้างไดเรกทอรี:
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
ผมต้องการสร้าง symlink ในที่เรียกว่าตัวอย่างที่ชี้ไปยังไดเรกทอรี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'
มันสร้าง symlink ไปยังไดเรกทอรีที่มี symlink aleady อยู่ทำให้ symlink ภายในไดเรกทอรีจริง
% 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
คุณคิดว่ามันจะดีกว่าหรือไม่ที่จะใช้ symlink เป็นไฟล์เสมอ ฉันคิดว่าคงเป็นการดีกว่าถ้าจะ จำกัด การใช้ตัวเลือก "พิเศษ" เหล่านี้