检索保存bash脚本的文件系统位置

Retrive the file system position where a bash script is saved

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In the bash script how do I know the script file name?

我经常需要bash脚本的文件系统来引用其他需要的资源。通常在shebang行后的行中使用以下代码。它设置一个名为"scriptpos"的变量,该变量包含脚本的当前路径

1
scriptPos=${0%/*}

它工作得很好,但是是否有更直观的东西来取代外壳扩展?


dirname,但需要fork

1
scriptPos=$(dirname"$0")


一种选择是

1
scriptPos=$(dirname $0)

这是以一个额外的过程为代价的,但更具自我描述性。如果脚本直接处于当前状态,则输出会有所不同(我认为这样做更好):

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
scriptPos=$(dirname $0)

echo '$0:' $0
echo 'dirname:' $scriptPos
echo 'expansion:' ${0%/*}

$ bash tmp.bash
$0: tmp.bash
dirname: .
expansion: tmp.bash

更新:试图解决JM666指出的缺点。

1
2
#!/bin/bash
scriptPos=$( v=$(readlink"$0") && echo $(dirname"$v") || echo $(dirname"$0") )