我找到了不同的解决方案来获取sh脚本自己的路径,但它们都不能通过.
在纯POSIX中工作。
我到目前为止的解决方案:
dirname $(readlink -f $0)
在sh中工作,但是给出父脚本的路径$0
是依赖于流程的(见上文)
${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 '$0 :' $(dirname $(readlink -f $0))
echo '$BASH_SOURCE :' $BASH_SOURCE
$ sh script1.sh
$0 : /tmp/sof
$BASH_SOURCE :
我可以在script2.sh中编写什么来获取正确的/ tmp / sof / src目录?
答案 0 :(得分:1)
因为在script1.sh中找到script2.sh所在的目录或多或少是不可能的,所以尝试在它周围工作。您还可以在script1.sh中找到script1的目录,并且您也知道script1中script2.sh的相对路径。然后,您可以在script1.sh中设置一个指向script2.sh目录的环境变量,然后再获取它。然后,您可以在script2.sh
中访问此变量