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

时间:2012-09-10 14:49:29

标签: bash

  

可能重复:
  In the bash script how do I know the script file name?

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

scriptPos=${0%/*}

它工作正常,但有更直观的东西替换shell扩展吗?

2 个答案:

答案 0 :(得分:1)

dirname,但需要fork

scriptPos=$(dirname "$0") 

答案 1 :(得分:0)

一个选项是

scriptPos=$(dirname $0)

这是以额外流程为代价的,但更具自我描述性。如果脚本直接在当前,则输出不同(在我看来更好):

#!/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指出的缺点。

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