Tôi muốn đặt một lệnh vào tập lệnh shell sẽ tạo ra một liên kết tượng trưng đến thư mục, nhưng tập lệnh này có thể được chạy đi chạy lại, vì vậy trong các lần gọi tiếp theo, lệnh không nên thay đổi bất cứ điều gì.
Đây là cấu trúc thư mục:
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
Tôi muốn tạo một liên kết tượng trưng trong foo/
các đoạn được gọi là đoạn trỏ đến thư mục /tmp/test_symlink/repo/resources/snippets
.
Vì vậy, tôi chạy:
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
mà cho kết quả mong muốn.
% 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 thư mục, 5 tập tin
Tuy nhiên, khi lệnh được chạy lại,
% 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'
nó tạo một symlink đến một thư mục, trong đó symlink luôn tồn tại sẽ đặt symlink bên trong thư mục thực
% 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
Tại sao điều này xảy ra và làm thế nào tôi có thể sửa đổi lệnh để các lệnh tiếp theo sẽ không tạo ra hiệu ứng kỳ lạ này?
-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
Bạn có nghĩ rằng tốt hơn là coi symlink là một tệp luôn không? Tôi có thể nghĩ rằng sẽ tốt hơn nếu hạn chế sử dụng các tùy chọn "đặc biệt" này?