在bash脚本中创建一个指向不同文件夹的符号链接

9
我的bash脚本接收两个文件夹参数(已经存在)。
我想在第一个文件夹中创建到第二个文件夹的链接。
例如,如果我有文件夹/home/matt/a和/home/matt/b,我会这样调用脚本:
/home/matt # ./my_script ./a ./b

我希望在a文件夹内看到一个指向b的符号链接。
当然,只需要执行以下操作:
ln -s $2 $1/link

脚本不起作用...(它会创建一个寻找a内./b的链接)

这只是一个非常简单的例子,我正在寻找一个通用的脚本,可以接受不同的参数(绝对路径或相对路径...等等)

3个回答

7

试一下这个:

ln -s "$(readlink -e "$2")" "$1/link"

如果您有readlink命令,您可以尝试以下操作。或者,也可以尝试larsmans提供的另一种解决方案变体。
cd "$2"
dir=$(pwd)
cd -
ln -s "$dir" "$1/link"

1
#!/bin/sh
cd $2
ln -s "`pwd`" $1/link

它失败了,在$2中寻找$1/link...现在,我主要尝试仅使用相对路径来处理两个参数... - Matthieu
你的路径名中有空格吗?这可能解释了为什么没有适当引用就无法正常工作(正如Dennis Williamson所示)。 - Fred Foo

1

这里有另一个可爱的一行代码:

ln -s `cd \`dirname $2\`; pwd`/`basename $2` $1/link

2
您可以使用 $() 替代反引号来避免不必要的转义:ln -s "$(cd "$(dirname "$2")"; pwd)/$(basename "$2")" "$1/link" - Dennis Williamson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接