3

( …サブシェル… )$( …コマンド置換… )の 2 つのケースを区別する必要があります。

コマンド置換またはサブシェルで実行されることと、スクリプトで直接実行されることを区別する次の関数が既にあります。

#!/bin/bash
set -e

function setMyPid() {
    myPid="$(bash -c 'echo $PPID')"
}

function echoScriptRunWay() {
    local myPid
    setMyPid
    if [[ $myPid == $$ ]]; then
        echo "function run directly in the script"
    else
        echo "function run from subshell or substitution"
    fi
}

echoScriptRunWay
echo "$(echoScriptRunWay)"
( echoScriptRunWay; )

出力例:

function run directly in the script
function run from subshell or substitution
function run from subshell or substitution

望ましい出力

しかし、コマンド置換とサブシェルを区別するようにコードを更新したいと思います。出力を生成したい:

function run directly in the script
function run from substitution
function run from subshell

trapPSコマンド置換とサブシェルで実行すると、Bashは組み込みコマンドの動作が異なるため、これらのケースを区別する必要があります。

echoScriptRunWay | catPPSコマンドも気にします。しかし、私がここで作成したのは私にとって新しい質問です。

4

1 に答える 1