linux bash source 0,linux中BASH_SOURCE[0](转)
在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。
1 #!/bin/bash
2
3 function test_func()
4 {
5 echo "Current $FUNCNAME, \\$FUNCNAME => (${FUNCNAME[@]})"
6 another_func
7 echo "Current $FUNCNAME, \\$FUNCNAME => (${FUNCNAME[@]})"
8 }
9
10 function another_func()
11 {
12 echo "Current $FUNCNAME, \\$FUNCNAME => (${FUNCNAME[@]})"
13 }
14
15 echo "Out of function, \\$FUNCNAME => (${FUNCNAME[@]})"
16 test_func
17 echo "Out of function, \\$FUNCNAME => (${FUNCNAME[@]})"
执行后的结果为:
1 Out of function, $FUNCNAME => ()
2 Current test_func, $FUNCNAME => (test_func main)
3 Current another_func, $FUNCNAME => (another_func test_func main)
4 Current test_func, $FUNCNAME => (test_func main)
5 Out of function, $FUNCNAME => ()
所以,更加准确地说,FUNCNAME是一个数组,但是bash中会将它维护成类似一个堆栈的形式。与FUNCNAME相似的另外一个比较有用的常量是BASH_SOURCE,同样是一个数组,不过它的第一个元素是当前脚本的名称。这在source的时候非常有用,因为在被source的脚本中,$0是父脚本的名称,而不是被source的脚本名称。而BASH_SOURCE就可以派上用场了。
1 # If the script is sourced by another script
2 if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]
3 then
4 do_something
5 else # Otherwise, run directly in the shell
6 do_other
7 fi
BASH_SOURCE[0] BASH_SOURCE[0] 等价于 BASH_SOURCE, 取得当前执行的shell文件所在的路径及文件名。
在目录/home/sam/linux编程练习/Shell下新建脚本test.sh:
1 #!/bin/bash
2 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" && pwd )"
3 # DIR=$( cd "$( dirname ${BASH_SOURCE[0]} )/../" && pwd )
4 # DIR=`cd $( dirname ${BASH_SOURCE[0]} )/../ && pwd`
5 echo $DIR
6 echo "ok"
执行的时候,需要棵执行权限:chmod +x test.sh 然后执行./test.sh 而不是 sh ./test.sh
经测试以上写都正确:输出
1 /home/sam/linux编程练习
2 ok
其实就是一个:1.取得当前执行的shell文件所在的完整路径 2. 执行dirname,并进入父级目录 3. 打印当前工作目录的过程
1 # echo "${BASH_SOURCE[0]}"
2 # echo "${BASH_SOURCE}"
3 # echo "$( dirname "${BASH_SOURCE[0]}" )"
4 # DIR="$( cd "$( dirname ${BASH_SOURCE[0]} )" && pwd )"
5 # echo $DIR
linux bash source 0,linux中BASH_SOURCE[0](转)相关推荐
- linux bash 字符串 连接,Linux Bash 中字符串操作
Linux Bash 中字符串操作 所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 t ...
- linux kill 子进程6,linux – Bash:杀死子进程中的所有进程
在bash中,我可以通过$获取最后一个子进程的进程ID(pid)!变量.然后我可以在它完成之前终止这个子进程: (sleep 5) & pid=$! kill -9 $pid 这与广告一样有效 ...
- linux的source命令,linux命令之Source命令
该source命令在当前Shell环境中从指定为其参数的文件中读取并执行命令.将函数,变量和配置文件加载到Shell脚本中很有用. 该source命令在当前Shell环境中从指定为其参数的文件中读取并 ...
- linux bash命令_Ultimate Linux命令行指南-Full Bash教程
linux bash命令 Welcome to our ultimate guide to the Linux Command Line. This tutorial will show you so ...
- linux bash安装教程,linux bash命令怎么用?win10 linux bash命令使用教程
linux bash命令怎么用?微软在win10一周年更新预览版中加入了ubuntu bash命令支持,但是很多用户并不知道怎么使用.今天U大侠小编就针对这个问题给大家介绍下win10系统linux ...
- linux bash 漏洞 利用,Linux Bash发现重大漏洞
Linux Bash发现重大漏洞 Posted: 26. 09. 2014 | Author: QuenyWell | Category: Linux GNU Bourne Again Shell ( ...
- linux的source命令,Linux中source命令的用法
Linux中source命令的用法 Linux系统中,source命令通常用"."来代替,是一个点命令,与一般的命令有所不同,下面小编就给大家介绍下Linux中source命令的用 ...
- linux同名文件没有自动替换,linux – bash脚本替换文件中出现的所有占位符
我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件-- This is an {{VAR1}} {{VAR2}}. It should ...
- 修复linux bash破壳漏洞,Linux系统下如何检测并修复bash中的破壳漏洞
问题:我想要知道我的Linux服务器是否存在bash破壳漏洞,以及如何来保护我的Linux服务器不受破壳漏洞侵袭. 2014年9月24日,一位名叫斯特凡·沙泽拉的安全研究者发现了一个名为"破 ...
最新文章
- 03-Java的基础语法
- 程序员最想要的高逼格,都藏在这个开源项目里了!
- Lucene之Java实战
- jenkins 自带环境变量
- Background-size完美兼容IE
- Levko and Permutation CodeForces - 361B 思维 数论
- 【CodeForces - 735B】Urbanization (找规律,思维)
- 数据库基础知识——存储过程和函数
- 【干货】一文带你看透深度学习框架演进
- 转载:技术大停滞——范式春梦中的地球工业文明1:文明与技术
- Python3入门视频教程百度网盘
- 机器学习系列(11)_决策树挖掘NBA冠军球队数据
- android 系统vr,Android系统中的PowerVR成像框架
- 数据库练习题目(一)
- 动态规划设计方法详解最长递增子序列
- 如何分析和研究Log文件
- SQL Server数据库插入数据中文显示乱码问题
- 蓦然回首,一切都是浮云
- [QMT]07-迅投极简版调用教程
- 哈哈,真实山穷水尽疑无路,柳暗花明又一村啊
热门文章
- linux nat冲突,Linux系统下的NAT及防火墙的混合应用
- c语言osversioninfoex,xi52qian
- react动态改变选中不选中_当使用react hooks选中任何复选框时,如何使启用按钮起作用?...
- PCM设备E1保护切换功能介绍
- 【渝粤教育】21秋期末考试工程项目管理10324k2
- 【渝粤题库】陕西师范大学700007 生态学
- Linux as4开启telnet,linux as4 虚拟机 上开启 telnet 和ssh 和 ftp 服务
- 7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿
- 目录页码错误未定义书签怎么解决_目录页码对不齐应该怎么办?这2种方法,工作效率大增...
- C++两天一个程序(一)