利用此參數是在某些大量部屬的內部及特定的外部環境中,沒有辦法使用 Github 來做定期排程的 Shell Script 控管,而需要定期排程執行的事情越來越多,於是就在思考是否可以透過簡單的 Web Server 提供版本的 HASH 值,計算本地檔案並比較 hash 值來是否有需要更新 shell Script。
$BASH_SOURCE
一個數組變量,其成員是源文件名,在
簡單來說就是會回傳檔案名稱+路徑。FUNCNAME
數組變量中定義了相應的外殼函數名稱。shell函數${FUNCNAME[$i]}
在文件中定義,${BASH_SOURCE[$i]}
並從中調用${BASH_SOURCE[$i+1]}
寫一個簡單的shell ,來驗證函數會回傳甚麼值。
#!/bin/sh
echo "$BASH_SOURCE"
在不同路徑下執行shell,回傳不同的參數值。
[root@test-server shell]# sh echo.sh
echo.sh
#在同一路徑下執行shell,只回傳檔案名稱。
[root@test-server shell]# cd /
#跳轉至其他路徑。
[root@test-server /]# sh /tmp/shell/echo.sh
/tmp/shell/echo.sh
#在其他路徑下執行,帶出完整路徑。
確認回傳的內容後,利用此參數計算正在執行中 shell Script 的 Hash 值,但此處需要注意回傳字串需要在切割 。
#!/bin/sh
echo "$(sha1sum $BASH_SOURCE)"
echo "$(sha1sum $BASH_SOURCE |cut -d " " -f 1)"
[root@VM1500 shell]# sh echo.sh
f91ca05d6f25aee1fd080eced2ef6737994765a8 echo.sh
#未切割的參數值
f91ca05d6f25aee1fd080eced2ef6737994765a8
#已切割的參數值
[root@VM1500 shell]# cd /
#跳轉路徑
[root@VM1500 /]# sh /tmp/shell/echo.sh
f91ca05d6f25aee1fd080eced2ef6737994765a8 /tmp/shell/echo.sh
#未切割的參數值
f91ca05d6f25aee1fd080eced2ef6737994765a8
#已切割的參數值