为什么这个符号 link 创建了两个实例
Why is this symbolic link created two instances
我有一个用于我的点文件的安装脚本。我正在使用我的主文件夹创建一个目录的符号 links。 links 执行得很好,但创建了第二个符号 link,我无法解释为什么。
项目中的文件夹结构如下所示
install.sh
scripts/
shell.sh
shell/
install.sh
调用 shell.sh
并调用命令
ln -s $SCRIPTS_DIR/shell/ $HOME/.shell
$SCRIPTS_DIR 是完整路径
所以我确实在我的主目录中得到了一个 .shell 目录 linked 就好了,但现在我的项目文件夹有一个额外的符号 link
install.sh
scripts/
shell -> PATH_TO_PROJECT/shell
shell.sh
shell/
任何解释将不胜感激
想一想当你 运行 命令两次 ln -s
当它的目标是目录而不是文件时会发生什么。
如果$HOME/.shell
不存在,则
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...创建它。但是,如果已经存在,那么...
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...将 .shell
视为目标目录名称,而不是要创建的目标的完整路径,并在 该目录中创建一个新条目 。
GNU ln
有一些扩展来修复这种用法,包括:
-h If the target_file or target_dir is a symbolic link, do not follow it. This is most useful with the -f option, to replace a symlink which may point to a directory.
因此,如果在 GNU 系统上运行,您可以使用:
# quotes added for bash compatibility, since question is tagged for both shells
ln -sfh "$SCRIPTS_DIR/shell/" "$HOME/.shell"
否则,先检查一下:
[[ -e $HOME/.shell ]] || ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
我有一个用于我的点文件的安装脚本。我正在使用我的主文件夹创建一个目录的符号 links。 links 执行得很好,但创建了第二个符号 link,我无法解释为什么。
项目中的文件夹结构如下所示
install.sh
scripts/
shell.sh
shell/
install.sh
调用 shell.sh
并调用命令
ln -s $SCRIPTS_DIR/shell/ $HOME/.shell
$SCRIPTS_DIR 是完整路径
所以我确实在我的主目录中得到了一个 .shell 目录 linked 就好了,但现在我的项目文件夹有一个额外的符号 link
install.sh
scripts/
shell -> PATH_TO_PROJECT/shell
shell.sh
shell/
任何解释将不胜感激
想一想当你 运行 命令两次 ln -s
当它的目标是目录而不是文件时会发生什么。
如果$HOME/.shell
不存在,则
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...创建它。但是,如果已经存在,那么...
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...将 .shell
视为目标目录名称,而不是要创建的目标的完整路径,并在 该目录中创建一个新条目 。
GNU ln
有一些扩展来修复这种用法,包括:
-h If the target_file or target_dir is a symbolic link, do not follow it. This is most useful with the -f option, to replace a symlink which may point to a directory.
因此,如果在 GNU 系统上运行,您可以使用:
# quotes added for bash compatibility, since question is tagged for both shells
ln -sfh "$SCRIPTS_DIR/shell/" "$HOME/.shell"
否则,先检查一下:
[[ -e $HOME/.shell ]] || ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"