POSIX 호환 쉘에서 명령 대체에서 스크립트가 실행되었는지 여부를 확인할 수 있습니까?
my-outer $(my-inner) $(my-other-inner)
위의 예에서는 내부 명령 대체인지 확인 my-inner
해야 합니다 .my-other-inner
답변1
제가 이해한 것이 맞다면 그렇지 않습니다.
귀하의 질문은 다음과 같이 요약됩니다. foobar
"기본" 쉘에서 실행합니까, 아니면 echo $(foobar)
(명령 대체)?
foobar
다음을 테스트할 수 있습니다.
tty
(제가 tty 아래인가요?)$SHLVL
(껍질이 몇 뭉치 있습니까?)
필요에 따라 SHLVL
사용자(쉘)가 명령을 실행한다고 가정하고 변수를 저장하고 비교할 수 있습니다.
메인 쉘 같은 것이 없고, 로그인 쉘(tty 포함), cron에서 분기된 쉘, 데몬(메일, 아파치)이 있지만 "메인" 쉘은 없기 때문에 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