( …サブシェル… )と$( …コマンド置換… )の 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
trap
PSコマンド置換とサブシェルで実行すると、Bashは組み込みコマンドの動作が異なるため、これらのケースを区別する必要があります。
echoScriptRunWay | cat
PPSコマンドも気にします。しかし、私がここで作成したのは私にとって新しい質問です。