如何创建一个依赖于其他文件的符号链接?

4
我知道我的主题有点令人困惑,但这就是我想做的事情。
我有一个文件,我想在我的主目录~/bin中创建一个链接,但当我执行符号链接的文件时,该文件需要其目录中的另一个文件。因此,它无法运行,因为找不到其他文件。我该怎么办?

1
也要添加到另一个文件的链接。 - Kerrek SB
4个回答

4

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

  1. 编辑shell脚本,将其指向文件的绝对路径,而不仅仅是basename。

    ./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

更多关于符号链接的信息


1
Numero UNO FTW! - Danuofr

1

我宁愿在~/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


0

或者,你可以修改你的脚本如下

pushd ~/bin

##### your script here

popd

0

readlinkdirname 的组合可以获取脚本的实际目录:

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

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