我知道我的主题有点令人困惑,但这就是我想要做的。
我有一个文件,我想创建一个链接到我的家〜/ bin,但是当我运行该文件(shell脚本)时创建该文件的链接时,该文件需要在其目录中的另一个文件。因此,它无法运行,因为它找不到其他文件。我能做什么?
谢谢
答案 0 :(得分:2)
嗯,你有两个简单的解决方案。
编辑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
标记表示它将编辑文件。最后,实现简单的搜索和替换操作,您可以选择手动完成。
第二种方法是像对待其他文件一样为文件创建ln -s
,因此两个文件之间存在符号链接。
ln -s /far/off/script.sh ~/bin/script.sh
和
ln -s /far/off/file.sh ~/bin/file.sh
答案 1 :(得分:0)
或者,您可以将脚本修改为
pushd ~/bin
##### your script here
popd
答案 2 :(得分:0)
readlink
和dirname
的组合将获得脚本的实际目录:
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
。