基本関数パラメータ(bash偽信号を手動で生成)

基本関数パラメータ(bash偽信号を手動で生成)

私は特定の状況で特定のパラメータを使用して関数を自動的に呼び出すことができるソリューションを探しています。
以下は具体的なシナリオです。

エラーが発生した場合は、次のようにエラーハンドラを設定できます。

function _trap_err () {
    echo "An error occurred in "$1":"$2" on "$3":"$4".
}

必要なデバッグデータを自動的に収集するようにトラップを設定できます。適切な実行時に

trap '_trap_err "$BASH_SOURCE" "$BASH_LINENO" "$FUNCNAME" "$BASH_COMMAND" ' ERR

AFAIK、これはbashがエラーを検出して信号を送信した場合にのみ機能します。

たとえば、関数引数を確認するときにチェックが失敗したときにエラーを手動で通知するようにこの動作を拡張したいと思います。

# Usage: myfunc <requiredarg>
function myfunc () {
    [[ $# != 1 ]] && emit_err_signal
}

そのエラーを手動で通知する方法がある場合、そのデバッグパラメータは実行中の適切な時点で自動的に収集され、意味のあるデバッグ情報を提供できます。

別のアプローチは、エラーメッセージ(各チェックでハードコードする必要がある)のみを表示し、エラーが発生した場所を表示しないことです。

どんなアイデアがありますか?

編集する
これが私の.bashrcファイル用であることを指定する必要があります。ファイルが終了したくないので、デバッグ情報だけが必要です。これに対する落とし穴は少し過剰かもしれません。次の解決策がうまくいくと思います。

function _debug () {
    local _message=${1:-""}
    printf "\e[1;32m[BASHRC] DEBUG: %-20s - %s\e[0m\n" "$BASH_SOURCE:$BASH_LINENO" "$_message"
}

_debug "Testing debug message."

> [BASHRC] DEBUG: .bashrc.d/bashrc:18  - Testing debug message.

ベストアンサー1

終了コードを使用できます。

set -e
# Usage: myfunc <requiredarg>
ARGS_NUM_ERROR=50
function myfunc () {
    [[ $# != 1 ]] && exit $ARGS_NUM_ERROR
}

ARGS_NUM_ERRORその後、適切な処理でスクリプトをキャプチャできます。

おすすめ記事