Um script está sendo executado dentro da substituição de comandos?

0

Em um shell compatível com POSIX, é possível determinar se um script está sendo executado dentro da substituição de comandos?

my-outer $(my-inner)  $(my-other-inner)

Para o exemplo acima, my-inner e my-other-inner precisariam determinar se dentro da substituição do comando.

    
por dgo.a 29.03.2016 / 09:40

2 respostas

1

Se eu entendi bem, não realmente.

Sua pergunta se resume em: estou executando foobar do shell "principal" ou echo $(foobar) (substituição de comando)?

foobar pode testar o seguinte

  • tty (estou sob um tty?)
  • $SHLVL (quantos pilha de casca?)

Dependendo da sua necessidade, você pode armazenar e comparar SHLVL var, isso supõe que você (seu shell) é aquele que executa o comando.

Eu coloquei quote arroud main, porque não existe shell principal, você tem loggin shell (com tty), shell bifurcado do cron, daemons (mails, apache), mas nenhum shell "principal".

editar:

como apontado SHLVL pode ser difícil de usar

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>
    
por 29.03.2016 / 10:16
1

Em zsh , verifique se há cmdsubst string em zsh_eval_context array :

$ echo "$(
  c=cmdsubst
  if (($zsh_eval_context[(Ie)$c])); then
    echo inside cmdsubst
  fi
)"
inside cmdsubst
    
por 29.03.2016 / 11:12