Shell脚本:需要使用以前的文件夹而不是当前目录

时间:2016-09-12 09:15:45

标签: linux bash shell

有这样的结构:

  

/dir1/dir2/dir3/dir4/my_script.sh

在我的脚本中的某一点,需要将dir3的完整路径存储到变量中。 我知道这有效:

CURRENT=`pwd`

但是,我如何存储前一个?

警告:我搜索过类似的问题,但都包括更改当前目录,这是我想避免的。

编辑:我的意思是,因为我正在运行my_script.sh,当前目录是/ dir1 / dir2 / dir3 / dir4 / 我想存储一个变量:/ dir1 / dir2 / dir3 /

2 个答案:

答案 0 :(得分:2)

如何使用dirname

dirname $(pwd)
/dir1/dir2/dir3

将一个目录的值存储在变量中:

 x=$(dirname $(pwd))
 echo $x
 /dir1/dir2/dir3

答案 1 :(得分:1)

您可以在本地引用任何目录的父目录..,而不是在子shell中执行任何字符串操作或启动命令,或者如果您可以信任$PWD变量,则可以使用{ {1}}。

当然,这只是让你使用父目录,它不会给你父目录的名称。为此,您已经有了几个可用的替代品。还有一个,请继续阅读。

在bash中,$PWD/..内置命令有两个选项,cd告诉-P在解析符号链接时使用遍历目录结构的物理目录结构,{{1}手册页中说的是:

cd

所以...虽然你可能完全没有以下几点:

-L

因此,您可以使用以下命令获取父目录:

                                   the -L option forces symbolic links
      to  be followed by resolving the link after processing instances
      of .. in dir.  If .. appears in dir, it is processed by removing
      the  immediately previous pathname component from dir, back to a
      slash or the beginning of dir.

请注意,虽然这确实涉及目录更改,但更改实际上位于子shell(parentdir="$(cd ..; pwd)" )内,因此它不会影响您的脚本。

请注意,我说“有效”,因为严格来说,parentdir="$(cd -L ..; pwd)" $(...)$(...)都是内置来打击,所以你是实际上并没有产生新的贝壳。