为什么我的 link 坏了? Bash

Why is my link broken? Bash

我正在为我的脚本尝试 link 文件在 while 循环中,但是简单的 linking 代码本身会创建一个损坏的 link。

目录结构是这样的:

main/working/script.sh
main/working/dir
main/shared/default/some_files

我的脚本有这样的代码:

ln -s ../shared/default/* dir

这会造成损坏 link。如果我进入 main/working/dir 目录并使用 ln -s ../../shared/default/* .

,我可以使 link 不损坏

那是因为你link给了一个相对路径;在你的脚本中转到 main/working/:

cd main/working/
ln -s ../shared/default/* dir

要么使用绝对路径:

ln -s /absolute/path/to/shared/default/* dir

您甚至可以 deduce the path where your script is located 并使用该路径:

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
ln -s $DIR/../../shared/default/* dir

edit:如果您不在正确的目录中,bash 无法扩展 *,因此您可以解决这个问题以临时更改目录:

# go to dir to make correct relative links
cd dir
ln -s $DIR/../../shared/default/* ./
cd ..