繁体   English   中英

Shell脚本:需要使用当前目录之前的文件夹

[英]Shell Script: Need to use previous folder than current directory

具有以下结构:

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

在脚本的某一时刻,需要将dir3的完整路径存储到变量中。 我知道这可行:

CURRENT=`pwd`

但是,如何存储上一个?

警告:我搜索了类似的问题,但是所有问题都包括更改当前目录,这是我要避免的事情。

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

如何使用dirname

dirname $(pwd)
/dir1/dir2/dir3

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

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

您可以使用BASH字符串操作来获取任何完整路径的parent的父目录路径:

$> pwd
/dir1/dir2/dir3/dir4
$> echo "${PWD%/[^/]*}"
/dir1/dir2/dir3

%/[^/]*从当前工作目录$PWD删除最后一个匹配模式/*

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

当然,这只允许您使用父目录,而没有给您父目录的名称。 为此,您已经有几个可用的替代方法。 再读一遍。

在bash中, cd内置命令具有两个选项-P告诉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.

所以...虽然您可能会完全满意以下内容:

parentdir="$(cd ..; pwd)"

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

parentdir="$(cd -L ..; pwd)"

请注意,尽管这确实涉及目录更改,但是更改实际上是在子shell( $(...) )内,因此它不会影响您的脚本。

请注意,我说“有效”是因为严格来说, $(...)cdpwd都是bash 内置的 ,因此您实际上并没有产生新的shell。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM