Chamando um script com a opção bash -c

0

Existem pelo menos 3 maneiras possíveis de chamar um script bash:

:~$./myscript
:~$bash ./myscript
:~$bash -c "./myscript"

Um disse que na invocação do caso # 3 ( -c option) há mais um processo bash na hierarquia. Eu preparei um script de teste simples:

echo "SHLVL: $SHLVL"  
ps aux | grep bash

A variável SHLVL é de fato maior em um no caso # 3, mas o ps não produz nenhum processo bash extra no caso # 3. O único processo bash conectado ao script é

bin/bash ./testscript

Então, onde está esse processo extra de bash?

    
por Mulligan 31.05.2017 / 11:56

1 resposta

1

Na verdade, parece haver uma otimização no bash.

Vamos criar um script sleep20s :

#! /bin/bash
sleep 20

Para evitar ambiguidades, vamos iniciar um shell ksh.

Com este comando: bash -c "./sleep20s" , você recebe:

ksh
  sleep20s
    sleep

Ooops, onde está o bash? Mas saiba se fazemos algo que requer o intérprete bash, como chamar o mesmo comando duas vezes: bash -c "./sleep20s;./sleep20s" , então você obtém:

ksh
  bash
    sleep20s
      sleep

E o bash está de volta. Então o bash poderia ser inteligente e usar um exec para iniciar o script filho nos casos triviais.

    
por 31.05.2017 / 14:55