Como executar scripts em um comportamento pai-filho no bash?

1

Suponha que eu tenha dois scripts chamados parent.sh e child.sh . O script parent.sh contém a linha bash child.sh e o script child.sh contém echo "This is the child script" .

Agora, se o usuário executar o parent.sh , ele deverá simplesmente chamar o script child.sh e sair. Mas se o usuário executar o script child.sh , ele deverá gerar um erro dizendo only parent.sh can execute the child.sh script .

Existe uma maneira que eu posso conseguir este tipo de comportamento de executar os scripts? Este foi apenas um pequeno exemplo, tenho um conjunto enorme de scripts que um usuário pode executar, mas esses scripts devem only ser executados pelo script parent .

Isso é apenas para garantir que o usuário não execute o script errado por engano. Eu não quero remover os usuários read/write permissões.

Meus requisitos em uma casca de noz:

bash parent.sh -> execute bash child.sh -> execute something by child.sh
    
por Abhimanyu Saharan 27.05.2016 / 15:13

1 resposta

2

Aqui está uma maneira de alcançá-lo:

$ cat parent.sh
#!/bin/sh

echo parent.sh running

./child.sh
$ cat other.sh
#!/bin/sh

echo other.sh running

./child.sh
$ cat child.sh
#!/bin/sh

parent="$(ps -o comm= -p $PPID)"

if [ "$parent" != parent.sh ]; then
    echo this script should be directly executed by parent.sh, not by $parent
    exit 1
fi

echo "child.sh proceeding"
$ ./parent.sh
parent.sh running
child.sh proceeding
$ ./other.sh
other.sh running
this script should be directly executed by parent.sh, not by other.sh

Observe que isso é apenas verificar se o processo pai imediato é o esperado. Se você precisa ir mais fundo na hierarquia do processo, você precisa adaptar o script para escalar o relacionamento pai.

Uma maneira alternativa pode ser exportar uma variável personalizada e verificar se ela está configurada nos processos filhos.

Nenhum desses métodos é realmente seguro, pois existem maneiras simples de falsificar um nome de processo ou definir qualquer variável.

    
por 27.05.2016 / 15:33