我想要一种可靠的方法来获取脚本所在目录的名称。我希望这种方法在从同一目录调用时也能起作用(dirname $0
在这种情况下,大多数用例都会返回“。”)。以下是其中一种方法:
FULL="$( cd "$(dirname "$0")" ; pwd -P )"
SHORT=${FULL##*/}
逻辑很简单……移动到脚本目录,pwd
从那里调用,然后删除除最终目录名称之外的所有内容。但是,我似乎无法弄清楚将其转换为一行的语法。我希望得到帮助。
答案1
一种方法是使用basename
而不是参数替换。
FULL=$(basename "$(cd $(dirname $0) ; pwd -P)")
引号用于处理带空格的目录名。
一定有更优雅的方法来处理这个问题,但这种快速而粗糙的方法只需对当前命令进行少量修改即可满足您的需要。
另一种方法是依赖变量PWD
:
FULL=$(cd $(dirname $0) ; echo ${PWD##*/})
不需要更改目录的方法将依赖于以下readlink
命令:
FULL=$(basename "$(readlink -f $(dirname $0))")