como executar linhas vindas de um resultado grep?

10

Eu tenho um arquivo de texto com certas instruções de instalação e sei que posso encontrar uma ocorrência única no arquivo. Por exemplo, o arquivo de texto tem algo como:

MYDIR='find /home/user -name somedir'
export PERL5LIB=$PERL5LIB:$MYDIR

No bash, como posso executar as linhas depois de um grep no arquivo? Algo como:

execute result from "grep somedir INSTALLFILE"
execute result from "grep 'export PERL5LIB' INSTALLFILE"
    
por 719016 30.06.2011 / 15:09

3 respostas

4

Suposições:

  • você tem controle sobre esse arquivo e não está em risco de código malicioso
  • você deseja definir essas variáveis seu shell atual

Você pode redirecionar seus comandos para um arquivo temporário e executá-lo:

tmp=$(mktemp)
{
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
} > "$tmp"
. "$tmp"

Ou você pode avaliar os resultados

eval "$(grep somedir INSTALLFILE)"
eval "$(grep 'export PERL5LIB' INSTALLFILE)"

Atualizando uma resposta antiga. O que eu faria hoje é usar uma substituição de processo:

source <(
    grep somedir INSTALLFILE
    grep 'export PERL5LIB' INSTALLFILE
)
    
por 30.06.2011 / 16:12
11

Para avaliar as linhas em um processo de shell separado:

grep somedir INSTALLFILE | sh

Para avaliar as linhas no processo do shell em execução:

eval "$(grep somedir INSTALLFILE)"
    
por 30.06.2011 / 22:42
-2

Você já pensou em usar o recurso "exec" do find como em:

find somedir -name INSTALLFILE -exec {}\;
    
por 30.06.2011 / 15:19

Tags