取得當前 shell Script 路徑及檔名

利用此參數是在某些大量部屬的內部及特定的外部環境中,沒有辦法使用 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
#已切割的參數值

參考資料

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *