创建符合其他文件的符号链接

时间:2011-06-29 00:31:21

标签: linux bash shell ubuntu symlink

我知道我的主题有点令人困惑,但这就是我想要做的。

我有一个文件,我想创建一个链接到我的家〜/ bin,但是当我运行该文件(shell脚本)时创建该文件的链接时,该文件需要在其目录中的另一个文件。因此,它无法运行,因为它找不到其他文件。我能做什么?

谢谢

4 个答案:

答案 0 :(得分:2)

嗯,你有两个简单的解决方案。

  1. 编辑shell脚本以指向文件的绝对路径,而不仅仅是基本名称。

    ./path/to/file.sh    VS    file.sh

    所以像这样的东西应该做你的事。 sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh它在这种情况下搜索符号链接文件script.sh,并将对file.sh的调用替换为./path/to/file.sh。请注意,您经常会看到sed使用/。但它可以使用任何东西作为分隔符,如果你想在这里使用/你需要逃避它们。 /。你可能想考虑逃避。 (期间),但在这种情况下,没有必要。如果您是sed的新用户,请注意-i标记表示它将编辑文件。最后,实现简单的搜索和替换操作,您可以选择手动完成。

  2. 第二种方法是像对待其他文件一样为文件创建ln -s,因此两个文件之间存在符号链接。

    ln -s /far/off/script.sh ~/bin/script.sh

    ln -s /far/off/file.sh ~/bin/file.sh

  3. more on symlinking

答案 1 :(得分:0)

或者,您可以将脚本修改为

pushd ~/bin

##### your script here

popd

答案 2 :(得分:0)

readlinkdirname的组合将获得脚本的实际目录:

my_dir=$(dirname "$(readlink -f "$0")")
source "$my_dir/other_file"

答案 3 :(得分:0)

我宁愿在〜/ bin /`中创建一个脚本文件,它从相应的目录中调用你的可执行文件。

以下是使用/ sbin / ifconfig:

的示例
$ cat > ~/bin/file
#!/bin/bash

file=/sbin/ifconfig
cd `dirname $file`
`basename $file` 
(ctr+d)
$ chmod +x ~/bin/file
$ file

在这里你应该看到ifconfig的输出,但重点是:它从/sbin目录执行。因此,如果ifconfig有依赖关系,它将正常工作。只需用绝对路径替换/sbin/ifconfig