如何获取BASH BASH脚本的目录名称和文件名?

发布于 2025-01-25 20:31:32 字数 711 浏览 2 评论 0原文

以下是已知的。可能会有所帮助:

获取文件名。 FullPath:

脚本:/path1/path2/path2/path3/path4/path5/bashfile.sh

#!/bin/bash

echo $0

read -r

输出:

/path1/path2/path3/path4/path5/bashfile.sh

get fileName.extension:

script:/path/path/path/path/path/path/path/path/path/path/bashfile。 sh

#!/bin/bash

echo ${0##*/}

read -r

输出:

bashfile.sh

问题:

如何获取bash bash脚本的目录名称和文件名?

Script: `/path1/path2/path3/path4/path5/bashfile.sh`

想要输出:

/path5/bashfile.sh

注释: 也许是可能的,如果您从右侧看,请从“/*/”中删除所有左侧

Follow are known. Possible it helps:

Get the filename.extension incl. fullpath:

Script: /path1/path2/path3/path4/path5/bashfile.sh

#!/bin/bash

echo $0

read -r

Output:

/path1/path2/path3/path4/path5/bashfile.sh

Get filename.extension:

Script: /path/path/path/path/path/bashfile.sh

#!/bin/bash

echo ${0##*/}

read -r

Output:

bashfile.sh

Question:

How to get directory name and file name of a bash script by bash ?

Script: `/path1/path2/path3/path4/path5/bashfile.sh`

Wanted output:

/path5/bashfile.sh

Remark:
Perhaps its possible, if you look from right side, remove all left from "/*/"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

满意归宿 2025-02-01 20:31:32
readlink -f $0 |awk -F"/" '{print "/"$(NF-1)"/"$NF}'
# or
awk -F"/" '{print "/"$(NF-1)"/"$NF}' <(readlink -f $0)
# or 
awk -F"/" '{print "/"$(NF-1)"/"$NF}' <<<$(readlink -f $0)
# or
sed -E 's/^(.*)(\/\w+\/\w+\.\w+$)/\2/g' <(readlink -f $0)

输出

/path5/bashfile.sh
readlink -f $0 |awk -F"/" '{print "/"$(NF-1)"/"$NF}'
# or
awk -F"/" '{print "/"$(NF-1)"/"$NF}' <(readlink -f $0)
# or 
awk -F"/" '{print "/"$(NF-1)"/"$NF}' <<<$(readlink -f $0)
# or
sed -E 's/^(.*)(\/\w+\/\w+\.\w+$)/\2/g' <(readlink -f $0)

output

/path5/bashfile.sh
梦里寻她 2025-02-01 20:31:32

比第一个拟合解决方案短一点:

脚本:/path1/path2/path3/path4/path4/path5/bashfile.sh

#!/bin/bash

n=$(($(echo $0 | tr -dc "/" | wc -m)+1))
echo "/""$(echo "$0" | cut -d"/" -f$(($n-1)),$n)"

read -r

输出:

/path5/bashfile.sh

也许它们是一个较短的解决方案。

Little bit shorter than the first fitting solution:

Script: /path1/path2/path3/path4/path5/bashfile.sh

#!/bin/bash

n=$(($(echo $0 | tr -dc "/" | wc -m)+1))
echo "/""$(echo "$0" | cut -d"/" -f$(($n-1)),$n)"

read -r

Output:

/path5/bashfile.sh

Perhaps they are a shorter solution.

请恋爱 2025-02-01 20:31:32
#!/bin/bash

echo "/$(basename "$(dirname "$0")")/$(basename "$0")"
echo
echo

read -r

输出:

/Dirname/Filname.Extension
#!/bin/bash

echo "/$(basename "$(dirname "$0")")/$(basename "$0")"
echo
echo

read -r

Output:

/Dirname/Filname.Extension
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文