日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux bash source 0,linux中BASH_SOURCE[0](转)

發布時間:2023/12/2 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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](转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。