2011-06-29 54 views
4

我知道我的话题有点令人困惑,但这是我想要做的。创建与其他文件相关性的符号链接

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

谢谢

+1

将链接添加到其他文件。 –

回答

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

more on symlinking

0

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

pushd ~/bin 

##### your script here 

popd 
0

组合的readlinkdirname会拿到剧本的实际目录:

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

我宁愿创建〜/斌/`调用从相应的目录中可执行的脚本文件。

下面是使用的例子/ 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即可。

相关问题