【发布时间】:2011-06-29 00:31:20
【问题描述】:
我知道我的主题有点混乱,但这是我想做的。
我有一个文件,我想创建一个指向我家 ~/bin 的链接,但是当我在运行文件(shell 脚本)时创建指向该文件的链接时,该文件需要在其目录中添加另一个文件。因此,它无法运行,因为它找不到其他文件。我能做些什么?
谢谢
【问题讨论】:
-
也添加指向其他文件的链接。
标签: linux bash shell ubuntu symlink
我知道我的主题有点混乱,但这是我想做的。
我有一个文件,我想创建一个指向我家 ~/bin 的链接,但是当我在运行文件(shell 脚本)时创建指向该文件的链接时,该文件需要在其目录中添加另一个文件。因此,它无法运行,因为它找不到其他文件。我能做些什么?
谢谢
【问题讨论】:
标签: linux bash shell ubuntu symlink
嗯,你有两个简单的解决方案。
编辑 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 使用 /'s。但它几乎可以使用任何东西作为分隔符,如果你想在这里使用/,你需要将它们转义。 /。您可能要考虑转义 . (句点)也是如此,但在这种情况下它不是必需的。如果您是sed 的新手,请意识到-i 标志意味着它将就地编辑文件。最后,实现其简单的搜索和替换操作,您可以选择手动进行。
第二种方法是为该文件创建一个ln -s,就像您对另一个文件所做的那样,因此两个文件之间存在符号链接。
ln -s /far/off/script.sh ~/bin/script.sh
和
ln -s /far/off/file.sh ~/bin/file.sh
【讨论】:
或者,您可以将脚本修改为
pushd ~/bin
##### your script here
popd
【讨论】:
readlink 和dirname 组合会得到脚本的实际目录:
my_dir=$(dirname "$(readlink -f "$0")")
source "$my_dir/other_file"
【讨论】:
我宁愿在 ~/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 替换为您的绝对路径即可。
【讨论】: