相关疑难解决方法(0)

通过符号链接执行时获取当前脚本的路径

我有一个实用程序,由几个目录组成,其中包含一些 bash 脚本和支持文件,这些文件将部署到多台机器上,可能在每台机器上的不同目录中。脚本需要能够引用相对于自身的路径,因此我需要能够获取当前正在执行的文件的路径。

我知道dirname $0直接调用我的脚本时可以完美运行的习语。不幸的是,人们希望能够从完全不同的目录创建指向这些脚本的符号链接,并且仍然具有相对路径逻辑的工作。

整体目录结构示例如下:

/
 |-usr/local/lib
 |  |-foo
 |  |  |-bin
 |  |  |  |-script.sh
 |  |  |-res
 |  |  |  |-resource_file.txt
 |-home/mike/bin
 |  |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh)
Run Code Online (Sandbox Code Playgroud)

我怎样才能可靠地引用/usr/local/lib/foo/res/resource_file.txt来自script.sh它是否被调用/usr/local/lib/foo/bin/script.sh或~mike/bin/link_to_script?

bash shell-script symlink

69
推荐指数
3
解决办法
5万
查看次数

获取脚本当前目录(这样我就可以在没有相对路径的情况下包含文件并从任何地方运行脚本)

我有以下问题,我的 shell 脚本包含如下内容:

mydir=''

# config load
source $mydir/config.sh

.... execute various commands
Run Code Online (Sandbox Code Playgroud)

我的脚本放在我的用户目录中..让我们说 /home/bob/script.sh

如果我在/home/bob目录中并运行./script.sh一切正常。

如果我在外面并想使用绝对路径/home/bob/script.sh,则无法正确调用 config.sh 文件。

$mydir为了使脚本可以从每条路径运行而无需费力,我应该分配什么值?

mydir=$(which command?)
Run Code Online (Sandbox Code Playgroud)

PS:作为奖励,如果脚本目录在 $PATH 内,请提供一个替代方案

bash shell-script

13
推荐指数
3
解决办法
3万
查看次数

标签 统计

bash ×2

shell-script ×2

symlink ×1