Bash – 获取文件path参数中的最后一个dirname / filename

我正在尝试为我们的开发服务器上托pipe的SVN编写一个post-commit挂钩。 我的目标是尝试自动签出已提交项目的副本到托pipe在服务器上的目录。 但是,我需要能够只读取传递给脚本的目录string中的最后一个目录,以便签出我们的项目所在的同一个子目录。

例如,如果我将一个SVN提交给项目“example”,我的脚本将获得“/ usr / local / svn / repos / example”作为第一个参数。 我需要从string的末尾得到“example”,然后用另一个string连接,这样我就可以签出“/ server / root / example”并立即查看所做的更改。

basename不会删除path的目录前缀:

 $ basename /usr/local/svn/repos/example example $ echo "/server/root/$(basename /usr/local/svn/repos/example)" /server/root/example 

Bash可以获得path的最后部分,而无需调用外部basename

 subdir="/path/to/whatever/${1##*/}" 

以下方法可用于获取path名的任何path:

 pathname=a/b/c echo $(basename $pathname) echo $(basename $(dirname $pathname)) echo $(basename $(dirname $(dirname $pathname))) 

输出:

 c b a