2014-04-04 134 views
0

的名字,我有我要在多个目录获取包含的文件夹

这里面的脚本复制一个shell脚本,我怎么能初始化变量

PARENT_FOLDER 

的方式在它的存储包含此脚本的文件夹的名称(而不是绝对路径)?

请注意,此脚本可以从任何文件夹运行。

在此先感谢。

+1

“文件夹的名称(而不是路径)”是什么意思? – John1024

+1

[可以用Bash脚本告诉它存储在哪个目录?](http:// stackoverflow。com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in) –

+0

对不起,我不是很确切。通过路径我的意思是绝对路径,而我的名字我的意思不仅仅是名字。你的回答正是我需要的(+1并且接受)非常感谢。 –

回答

2

在大多数情况下,下面的获取对脚本的目录的绝对路径:

PARENT_FOLDER=$(dirname "$(readlink -f "$0")") 

(OSX和BSD可能缺乏-f选项,而不该路径仍可能包含符号链接。)

如果你只是想在路径中最后的目录的名称,只需添加一个步骤:

PARENT_FOLDER=$(dirname "$(readlink -f "$0")") 
PARENT_FOLDER=${PARENT_FOLDER##*/} 

在系统中缺少readlink -f但它是bash可供选择:

PARENT_FOLDER="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
PARENT_FOLDER=${PARENT_FOLDER##*/} 

如果缺乏这两种readlink -f和bash:

PARENT_FOLDER="$(cd "$(dirname "$0")" && pwd)" 
PARENT_FOLDER=${PARENT_FOLDER##*/} 
+0

是的。它使用-f选项在mac osx上创建了一个问题,所以最好使用@AdrianFrühwirth –

+1

@IssamT提到的解决方案。 OSX通常有点不同。我也更新了我的答案。 – John1024

+0

现在我认为这是几乎任何人的完整答案。不错的工作 :) –

1
PARENT_FOLDER=$(pwd | awk -F/'{if ($NF!="") print $NF; else print "/"}') 
2

为了得到当前目录的父文件夹,您可以使用下面的命令

PARENT_FOLDER=$(pwd | awk -F"/" 'OFS="/"{$NF=""}1') 

更新

也低于命令可以工作

从命令目录名称的人页 打印NAME移除其尾端/组件;如果NAME不包含/,则输出'。'(表示当前目录)。

PARENT_FOLDER = $(目录名称 “$ PWD”) 或

PARENT_FOLDER=$(dirname "$0") 
相关问题