我有一个用于我的点文件的安装脚本。我用来创建一个目录到我的主文件夹的符号链接。这些链接执行得很好,但创建了第二个符号链接,我无法解释为什么。
项目中的文件夹结构如下所示
install.sh
scripts/
shell.sh
shell/
install.sh
calls shell.sh
并调用命令
ln -s $SCRIPTS_DIR/shell/ $HOME/.shell
$SCRIPTS_DIR 是完整路径
所以我的主目录中确实有一个 .shell 目录链接得很好,但现在我的项目文件夹有一个额外的符号链接
install.sh
scripts/
shell -> PATH_TO_PROJECT/shell
shell.sh
shell/
任何解释将不胜感激
想想当你运行时会发生什么ln -s
当目标是目录而不是文件时,命令两次。
If $HOME/.shell
不存在,那么
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...创建它。然而,如果它already存在,那么...
ln -s "$SCRIPTS_DIR/shell/" "$HOME/.shell"
...款待.shell
作为目标目录名称,而不是要创建的目标的完整路径,并创建一个新条目within那个目录。
GNU ln
有一些扩展可以修复此用法,包括:
-h 如果 target_file 或 target_dir 是符号链接,则不跟踪它。这对于 -f 选项最有用,用于替换可能指向目录的符号链接。
因此,如果在 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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)