如何获取 sh 脚本自己的路径,即使是通过`.`
How to get sh script’s own path, even through `.`
我找到了不同的解决方案来获取 sh 脚本自己的路径,但其中 none 通过 .
在纯 POSIX sh 中工作。
我到目前为止的解决方案:
dirname $(readlink -f [=10=])
在 sh 中工作,但给出了父脚本的路径,因为 [=14=]
依赖于进程(见上文)
${BASH_SOURCE[0]}
这显然是一个仅 bash 的解决方案。
证明此解决方案不起作用:
$ tree --noreport
.
├── script1.sh
└── src
└── script2.sh
$ cat script1.sh
#!/bin/sh
. src/script2.sh
$ cat src/script2.sh
#!/bin/sh
echo '[=12=] :' $(dirname $(readlink -f [=12=]))
echo '$BASH_SOURCE :' $BASH_SOURCE
$ sh script1.sh
[=12=] : /tmp/sof
$BASH_SOURCE :
我可以在 script2.sh 中写什么以获得正确的 /tmp/sof/src 目录?
因为在 script1.sh 中找到 script2.sh 所在的目录几乎是不可能的,因此请尝试围绕它工作。你也可以在script1.sh里面找到script1的目录,你也知道script2.sh在script1里面的相对路径。然后,您可以在 script1.sh 中设置一个环境变量,指向 script2.sh 的目录,然后再获取它。然后你可以在script2.sh
中访问这个变量
我找到了不同的解决方案来获取 sh 脚本自己的路径,但其中 none 通过 .
在纯 POSIX sh 中工作。
我到目前为止的解决方案:
dirname $(readlink -f [=10=])
在 sh 中工作,但给出了父脚本的路径,因为 [=14=]
依赖于进程(见上文)
${BASH_SOURCE[0]}
这显然是一个仅 bash 的解决方案。
证明此解决方案不起作用:
$ tree --noreport
.
├── script1.sh
└── src
└── script2.sh
$ cat script1.sh
#!/bin/sh
. src/script2.sh
$ cat src/script2.sh
#!/bin/sh
echo '[=12=] :' $(dirname $(readlink -f [=12=]))
echo '$BASH_SOURCE :' $BASH_SOURCE
$ sh script1.sh
[=12=] : /tmp/sof
$BASH_SOURCE :
我可以在 script2.sh 中写什么以获得正确的 /tmp/sof/src 目录?
因为在 script1.sh 中找到 script2.sh 所在的目录几乎是不可能的,因此请尝试围绕它工作。你也可以在script1.sh里面找到script1的目录,你也知道script2.sh在script1里面的相对路径。然后,您可以在 script1.sh 中设置一个环境变量,指向 script2.sh 的目录,然后再获取它。然后你可以在script2.sh
中访问这个变量