Verificando se a string existe no arquivo com cat | grep

0

Bom dia a todos

Objetivo: verificar se existe uma string em um arquivo e executar ações adequadamente

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"

A saída sempre apresenta "existe linha, pulando" em casos de bot onde a linha existe e não existe.

Adicionando a saída a uma variável, e. x, substituindo a linha na declaração if com a variável produz a saída correta,

Como posso 'pular' a rota da variável e executar o comando diretamente?

    
por Cybex 03.10.2016 / 11:08

1 resposta

8

grep pode ser usado como um comando de condição. Retorna true quando o padrão corresponde. Aqui, você deseja uma pesquisa de sequência fixa ( -F ) e provavelmente corresponderá na linha completa ( -x ):

if sudo cat /etc/sudoers |
  grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
  echo found
else
  echo not found
fi

Ou se a configuração sudoers permitir que você execute o comando grep além do cat one:

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-q diz a grep para ficar quieto, para apenas retornar o status verdadeiro / falso através do status de saída, mas não produzir nada no stdout.

Observe que a configuração dos sudoers pode incluir outros arquivos de configuração que essa abordagem não levará em conta. O mesmo para permissões concedidas a grupos dos quais o usuário é membro.

Você pode querer usar sudo -lU "$USER" .

    
por 03.10.2016 / 11:14