Evitar ou detectar a ação de alteração de diretório em um shell script

2

Eu tenho uma biblioteca que aceita plugins. Os plugins são scripts de shell. Eu quero impedir que os plugins alterem o diretório de trabalho atual para qualquer comando no script.

Uma coisa que eu poderia fazer é de alguma forma impedir a mudança de diretório, tornando cd ou similar em algum tipo de no-op. Isto parece ser uma má idéia e talvez tirânico / muito pesado.

A outra coisa que eu poderia fazer é forçar os plugins a passar por um conjunto de testes, e nesses testes de alguma forma detectar uma mudança de diretório no script. (E falha no teste se um comando de mudança de diretório foi emitido).

A minha pergunta é - existe uma boa maneira de prevenir cd'ing (e comandos semelhantes ... o que são?), ou detectar um cd dentro de um script de shell?

    
por Alexander Mills 06.07.2017 / 23:16

2 respostas

3

Com uma abordagem plugins-run-in-subshell (embora isso tenha inconvenientes principalmente se os plugins precisam manipular o estado no pai), o plug-in pode emitir as chamadas chdir desejadas, já que isso não alterará o funcionamento diretório do pai:

assumethisistheplugincode() {
    cd /tmp
    pwd
}

cd /var/tmp || exit 1
printf "before "
pwd

# and this is how we run a "plugin", in a subshell...
( assumethisistheplugincode )

printf "after "
pwd
    
por 07.07.2017 / 00:16
1

uma abordagem mais simples

copy the script inside a directory where it cannot 'escape'

execute th script :

chroot /directory /bin/bash ./script.sh

    
por 07.07.2017 / 02:08