Tips
BASH: \LS
前缀\的目的是避免alias替换,使用命令的原生目标来执行。当 alias ls=’ls –color’ 时,ls的输出结果是带高亮色的,\ls则避免了alias替换,输出结果没有高亮色。
BASH:函数名
1
2
3
4
5
6
function test_func()
{
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
another_func
echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
}
$FUNCNAME是一个数组,包含倒序的函数名调用栈。例如“(child_func parent_func main_entry main)”,其中main_entry是首个函数调用入口,然后依次嵌套调用函数 parent_func 和 child_func,而main是一个伪函数名,它表示整个脚本文件。
BASH:避免多次SOURCE
- BASH自身检测SOURCE状态
- 使用一个环境变量来标识已经source过了
1
2
3
4
5
6
7
8
9
10
_sourced_="__sourced_$$__"
echo "Flag variable $_sourced_=${!_sourced_}"
if [ -z "${!_sourced_}" ]; then
eval "$_sourced_=1"
echo "It is the first time to source script"
else
echo "The script have been sourced"
fi
以及:
1
function if_in_source () { [[ $- = *i* ]]; }
以及:
1
2
3
4
5
6
7
8
9
# If the script is sourced by another script
if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]
then
do_something
else # Otherwise, run directly in the shell
do_other
fi
function if_in_source () { [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]; }
留下评论