ディレクトリへのシンボリックリンクを作成するシェルスクリプトにコマンドを配置したいのですが、このスクリプトは何度も実行される可能性があるため、以降の呼び出しでは、コマンドは何も変更しません。
ディレクトリ構造は次のとおりです。
% 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
常にシンボリックリンクをファイルとして扱う方が良いと思いますか?これらの「特別な」オプションの使用を制限する方が良いと思いましたか?