Bashシェルスクリプトで「.」や「source」コマンド経由で呼び出されていないかをチェックする方法
はじめに
Bashシェルスクリプトで関数のコールスタックを取得・出力する の続きです。
続きというよりも、当エントリを書きたかったための前振りが上記のエントリです。
実行するシェルスクリプトが、 .
や source
コマンド経由で呼び出された場合には、内部で定義されている 変数 や 関数 がカレントプロセス上に展開されることになります。
スクリプトのファイル内に書かれている 変数 や 関数 が漏れてしまうのを避けるための方法を共有します。
検証環境
$FUNCNAME
変数をハックする
Bashシェルスクリプトで関数のコールスタックを取得・出力する で見たとおり、 .
または source
コマンドを使って呼び出されたスクリプトは、 $FUNCNAME
変数のスタックトレース上に source
という関数スタックが積まれます。
この仕組みを利用し、 is_sourced
という関数を作成し、判定を行います。
ひとこと
.
または source
コマンドを使って呼び出されることを期待する場合には以下のように記述すればOKですね。
ディスカッション
コメント一覧
まだ、コメントがありません