1

可能重复:
在 bash 脚本中,我如何知道脚本文件名?

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

scriptPos=${0%/*}

它工作得很好,但是有没有更直观的东西来替换 shell 扩展?

4

2 回答 2

1

dirname,但它需要一个fork

scriptPos=$(dirname "$0") 
于 2012-09-10T15:02:47.690 回答
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") )
于 2012-09-10T15:05:33.863 回答