获取bash文件所在的目录绝对路径以及获取函数方法名称

原网址链接:https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within

一个非常好用又简单的方法,不管是软连接还是硬链接都可以获取

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ];
do 
      DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
      SOURCE="$(readlink "$SOURCE")"
      [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"  
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

${BASH_SOURCE[0]}可以获取文件目录,接着判断其是否为软连接,如果是的话,获取其绝对路径。

如果不是软连接目录,可以直接用以下方式来获取获取脚本的完整目录名称。

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

另外一个比较好用的变量FUNCNAME,是用于获取函数名称,注意,他是一个数组而非字符串,其中数组的第一个元素为当前函数的名称

#!/bin/bash

function test_func(){
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
another_func
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"}

function another_func(){
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"}

echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
test_func
echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"

输出结果:

Out of function, $FUNCNAME => ()
Current test_func, $FUNCNAME => (test_func main)
Current another_func, $FUNCNAME => (another_func test_func main)
Current test_func, $FUNCNAME => (test_func main)
Out of function, $FUNCNAME => ()
在Linux系统中,可以使用命令行工具来获取特定文件夹下所有`.v`文件绝对路径,并将这些路径保存到一个文本文件中。以下是一个常用的方法,使用`find`命令结合`xargs`和`echo`命令来实现这个目的: 1. 打开终端。 2. 使用以下命令: ```bash find /path/to/directory -type f -name "*.v" -print0 | xargs -0 -I {} echo {} > /path/to/output.txt ``` 这里的`/path/to/directory`是你想要搜索的文件夹的路径,`/path/to/output.txt`是你想要保存结果的文本文件路径。该命令的工作原理如下: - `find /path/to/directory -type f -name "*.v"`:这部分命令用于查找`/path/to/directory`路径下所有扩展名为`.v`的文件。 - `-print0`:`find`命令的这个选项用于以null字符(而不是换行符)结束每个输出的文件名,这对于包含空格和特殊字符的文件名特别有用。 - `|`:管道符号用于将前一个命令的输出作为后一个命令的输入。 - `xargs -0`:`xargs`命令用于读取输入数据,并将其作为参数传递给其他命令。`-0`选项告诉`xargs`使用null字符作为输入项分隔符。 - `-I {}`:这是一个替换字符串,用于告诉`xargs`将输入项替换到`{}`的位置上。 - `echo {}`:对于每个文件名,使用`echo`命令输出这个文件名。 - `> /path/to/output.txt`:将`echo`命令的输出重定向到`output.txt`文件中。 请确保将`/path/to/directory`和`/path/to/output.txt`替换为你实际的路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值