Script de bash: permitir mudança de “ambiente / identidade”

0

Eu me deparei com esse problema agora várias vezes e gostaria de encontrar uma maneira de automatizar / roteirizar essas coisas que envolvem uma mudança de identidade ou ambiente (não sei como chamar isso com precisão).

Um exemplo simples seria um script em que uma peça teria que ser executada com su . ( make install por exemplo). Para conseguir isso, pode-se usar sudo . No entanto, existem outras alterações no ambiente que não possuem essa solução de escape. Provavelmente bem conhecido é o python virtualenv onde se pode facilmente imaginar um script como

source virtEnv/bin/activate
python myScript.py

ou simplesmente um script que chama screen . Agora estou compilando o gstreamer que gostaria de automatizar em um script, pois precisarei implantar essa instalação em vários outros computadores posteriormente

for i in gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-python gnonlin gst-ffmpeg 
do
   gst-head
   cd ./$i
   git checkout tags/1.1.1
   ./autogen.sh
   make -j7
   exit
done

Onde gst-head é o script gst-uninstalled que carrega um pkg_config local (se tiver razão) e me coloca em um ambiente separado. Se eu colocar isso em um script, o script interromperá sua execução e continuará assim que eu executar exit desse ambiente.

    
por P.R. 10.07.2013 / 16:42

1 resposta

0

Esse "ambiente" em que o script "coloca você" é uma nova instância do seu shell. E em vez de simplesmente chamar gst-head sem um parâmetro, você deve passar os comandos como argumentos! Você pode ver essa parte no roteiro?

# if we got a command, run it, else start a shell
if test ! -z "$1";
then
  $@
  exit $?
fi

Eu acho que você deveria tentar fazer uso disso. BTW, se você quiser iniciar um shell a todo custo, então você não será capaz de interagir com ele a menos que você use esperar, de alguma forma (seja um script standalone expect ou embutido em um shell script).

    
por 10.07.2013 / 17:23

Tags