$caller_method
以下のコードに基づいて、関数呼び出し者が通常関数を呼び出したかどうか(たとえば、擬似コード関数でmytest 1
サブシェルスタイルを使用するなど)の値を取得できますかecho "(mytest 1)"
?
#!/bin/bash
function mytest() {
# THIS IS PSEUDOCODE
if $caller_method=directly; then
echo "THIS WAS CALLED DIRECTLY"
# Do other stuff
elif $caller_method=inside_a_subshell; then
echo "THIS WAS CALLED INSIDE A SUBSHELL"
# Do other stuff
fi
# END OF PSEUDOCODE
}
# CALLER
# Calling mytest directly
mytest 1
# Calling mytest inside a subshell
echo "$(mytest 1)"
予想出力:
THIS WAS CALLED DIRECTLY
THIS WAS CALLED INSIDE A SUBSHELL
もしそうなら、mytest()関数はこのmytest 1
メソッドを使用して呼び出されるかどうかに関係なく情報を理解または保存できますか$(mytest 1)
?
$(mytest 1 call_inside_a_subshell)
また、呼び出し側関数から、または同じ追加パラメータを渡したくありません。mytest 1 call_directly
ベストアンサー1
組み込み変数を使用してサブシェルに存在するかどうかを検出する方法に関するこの質問を見つけました。$BASHPID
サブシェルにいるかどうかはどうすればわかりますか?
したがって、コードは次のように書くことができます。
#!/bin/bash
function mytest()
{
if [ "$$" -eq "$BASHPID" ]; then
echo "THIS WAS CALLED DIRECTLY"
else
echo "THIS WAS CALLED INSIDE A SUBSHELL"
fi
}
# Calling mytest directly
mytest 1
# Calling mytest inside a subshell
echo "$(mytest 1)"