如何获得sh脚本自己的路径,即使通过`.`

时间:2016-02-28 09:42:19

标签: shell posix sh

我找到了不同的解决方案来获取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目录?

1 个答案:

答案 0 :(得分:1)

因为在script1.sh中找到script2.sh所在的目录或多或少是不可能的,所以尝试在它周围工作。您还可以在script1.sh中找到script1的目录,并且您也知道script1中script2.sh的相对路径。然后,您可以在script1.sh中设置一个指向script2.sh目录的环境变量,然后再获取它。然后,您可以在script2.sh

中访问此变量