我知道我的主题有点混乱,但这是我想做的。我想在主目录~/bin中创建一个链接文件,但是当我执行这个符号链接的文件时,这个文件需要在它的目录中有另一个文件。因此,它无法运行,因为它找不到另一个文件。我该怎么办?
~/bin
jucafojl1#
你有两个简单的解决办法。1.编辑shell脚本以指向文件的绝对路径,而不仅仅是基本名称。一个月一个月与一个月一个月因此,类似这样的代码应该可以完成. sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh之后的工作,它搜索符号链接文件,script.sh在本例中为www.example.com,并将对www.example.com的调用替换file.sh为./path/to/file.sh。注意,您经常看到sed使用/。但它可以使用任何内容作为分隔符,如果您希望在此处使用/,则需要转义它们。/.您可能要考虑转义。(句号)同样,但在这种情况下它是不必要的。如果你是sed的新手,要意识到-i标志意味着它将就地编辑文件。最后,我意识到这是一个简单的搜索和替换操作,你可以选择手工操作。1.第二种方法是创建一个ln -s到该文件,就像对另一个文件所做的那样,这样两个文件之间就存在一个符号链接。ln -s /far/off/script.sh ~/bin/script.sh以及ln -s /far/off/file.sh ~/bin/file.sh关于符号链接的更多信息
sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh
sed
-i
ln -s
ln -s /far/off/script.sh ~/bin/script.sh
ln -s /far/off/file.sh ~/bin/file.sh
vulvrdjw2#
我更愿意在~/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替换为绝对路径。
ifconfig
/sbin
/sbin/ifconfig
wz3gfoph3#
或者,您可以将脚本修改为
pushd ~/bin ##### your script here popd
mcdcgff04#
readlink和dirname的组合将获得脚本的实际目录:
readlink
dirname
my_dir=$(dirname "$(readlink -f "$0")") source "$my_dir/other_file"
4条答案
按热度按时间jucafojl1#
你有两个简单的解决办法。
1.编辑shell脚本以指向文件的绝对路径,而不仅仅是基本名称。
一个月一个月与一个月一个月
因此,类似这样的代码应该可以完成.
sed -i 's|file.sh|./path/to/file.sh|g' ~/bin/script.sh
之后的工作,它搜索符号链接文件,script.sh在本例中为www.example.com,并将对www.example.com的调用替换file.sh为./path/to/file.sh。注意,您经常看到sed
使用/。但它可以使用任何内容作为分隔符,如果您希望在此处使用/,则需要转义它们。/.您可能要考虑转义。(句号)同样,但在这种情况下它是不必要的。如果你是sed
的新手,要意识到-i
标志意味着它将就地编辑文件。最后,我意识到这是一个简单的搜索和替换操作,你可以选择手工操作。1.第二种方法是创建一个
ln -s
到该文件,就像对另一个文件所做的那样,这样两个文件之间就存在一个符号链接。ln -s /far/off/script.sh ~/bin/script.sh
以及
ln -s /far/off/file.sh ~/bin/file.sh
关于符号链接的更多信息
vulvrdjw2#
我更愿意在~/bin/'中创建一个脚本文件,从适当的目录调用您的可执行文件。
下面是使用/sbin/ifconfig的示例:
这里您应该看到
ifconfig
的输出,但重点是:它是从/sbin
目录执行的。所以如果ifconfig有依赖项,它将正常工作。只需将/sbin/ifconfig
替换为绝对路径。wz3gfoph3#
或者,您可以将脚本修改为
mcdcgff04#
readlink
和dirname
的组合将获得脚本的实际目录: