POSIX準拠のシェルでコマンド置換でスクリプトが実行されたかどうかを確認できますか?
my-outer $(my-inner) $(my-other-inner)
上記の例では、内部コマンドの代替であることを確認するmy-inner
必要があります。my-other-inner
答え1
私が理解したものが正しい場合はそうではありません。
あなたの質問は次のように要約されます。foobar
「基本」シェルで実行しますか、それともecho $(foobar)
(コマンドの置き換え)?
foobar
以下をテストできます。
tty
(私はttyの下ですか?)$SHLVL
(樹皮は何束ありますか?)
必要に応じて、SHLVL
ユーザー(シェル)がコマンドを実行すると仮定し、変数を保存して比較できます。
メインシェルのようなものがなく、ログインシェル(ttyを含む)、cronから分岐したシェル、デーモン(メール、Apache)がありますが、「メイン」シェルはないので、mainの周りに引用符を付けました。
編集する:
指摘したように、SLVLは使いにくいかもしれません。
archemar@home> cat t2.sh
echo "$SHLVL" $1
archemar@home> . ./t2.sh $SHLVL
3 3
archemar@home> ./t2.sh $SHLVL
4 3
archemar@home> ./t2.sh $(./t2.sh)
4 4
archemar@home>
答え2
zsh
、cmdsubst
文字列が存在することを確認してください。zsh_eval_context
大量に:
$ echo "$(
c=cmdsubst
if (($zsh_eval_context[(Ie)$c])); then
echo inside cmdsubst
fi
)"
inside cmdsubst