Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中获取给定路径的根目录?_Bash_Path_Directory_Dirname - Fatal编程技术网

如何在bash中获取给定路径的根目录?

如何在bash中获取给定路径的根目录?,bash,path,directory,dirname,Bash,Path,Directory,Dirname,我的剧本: #!/usr/bin/env bash PATH=/home/user/example/foo/bar mkdir -p /tmp/backup$PATH 现在我想得到“$PATH”:/home的第一个文件夹/ 如何始终像上面的示例一样检测第一个文件夹?“dirname$PATH”只返回“/home/user/example/foo/” 提前感谢!:) 如果路径总是有一个绝对的形式,你可以做一些像 ROOT=${PATH#/} ROOT=/${ROOT%%/

我的剧本:

    #!/usr/bin/env bash
    PATH=/home/user/example/foo/bar
    mkdir -p /tmp/backup$PATH
现在我想得到“$PATH”:/home的第一个文件夹/

如何始终像上面的示例一样检测第一个文件夹?“dirname$PATH”只返回“/home/user/example/foo/”


提前感谢!:)

如果路径总是有一个绝对的形式,你可以做一些像

ROOT=${PATH#/} ROOT=/${ROOT%%/*}


您也可以参考我的函数。

获取第一个FireFactory:

path=/home/user/example/foo/bar
mkdir -p "/tmp/backup$path"
cd /tmp/backup
arr=( */ )
echo "${arr[0]}"
PS:切勿在脚本中使用PATH变量,因为它将覆盖默认路径,并且脚本将无法执行许多系统实用程序

编辑:这可能适合您:

IFS=/ && set -- $path; echo "$2"
home

您可以尝试此awk命令:

 basedirectory=$(echo "$PATH" | awk -F "/" '{print $2}')
此时,
basedirectory
将是字符串home 然后你写:

rm -rf ./"$basedirectory"/
我找到了一个解决方案:

    #/usr/bin/env bash
    DIRECTORY="/home/user/example/foo/bar"
    BASE_DIRECTORY=$(echo "$DIRECTORY" | cut -d "/" -f2)
    echo "#$BASE_DIRECTORY#";
这将始终返回第一个目录。在本例中,它将返回以下结果:

    #home#
感谢@condorwasabi对awk的创意!:)

纯bash:

DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"
易于调整正则表达式。

您可以使用

#/usr/bin/env bash
DIRECTORY=“/home/user/example/foo/bar”
基本目录=$(目录名“${DIRECTORY}”)
echo“#$BASE#u目录”;
输出以下内容

/home/user/example/foo

我想,用户想从中提取
主页
。嗯
我怎么能像上面的例子一样总是检测到第一个文件夹
不是很清楚。我将其解释为OP试图从
/tmp/backup
路径获取第一个目录。我开始评论的目的是感谢您&+1对
路径
变量的警告:然后意识到答案可能不满足OP的要求。嗯,在这种情况下,konsolebox可能会从以下问题中正确解释:
现在我想得到“$PATH”的第一个文件夹:/home/
这看起来不错,但不起作用$basedirectory始终为空。但是谢谢!:)很高兴你找到了解决办法。不管怎样,你是对的,我只是编辑了剧本。我不知道为什么我写了
{print$1}
,我在发布之前也测试了它。现在应该可以了。对不起,我不明白。o、 哦,但是谢谢你。太糟糕了。祝您好运:)如果您的路径是相对的,并且看起来是这样的:
dir1/in/dir2
,那么您应该针对字段
-f1
,而不是
-f2
,解决方案应该输出
home
而不是
/home/user/example/foo
    #home#
DIR="/home/user/example/foo/bar"
[[ "$DIR" =~ ^[/][^/]+ ]] && printf "$BASH_REMATCH"
/home/user/example/foo