Verificando se existe string no arquivo com cat | grep

Verificando se existe string no arquivo com cat | grep

Bom dia a todos

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

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 "linha existe, pulando" em casos de bot onde a linha existe e não existe.

Adicionar a saída em uma variável, por exemplo, x, substituindo a linha na instrução if pela variável produz a saída correta,

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

Responder1

greppode ser usado como um comando de condição. Ele retorna verdadeiro quando o padrão corresponde. Aqui, você deseja uma pesquisa de string fixa ( -F) e provavelmente corresponda à 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 sudoersconfiguração permitir que você execute o grepcomando além daquele cat:

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

-qdiz greppara ficar quieto, apenas retornar o status verdadeiro/falso por meio do status de saída, mas não gerar nada no stdout.

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

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

informação relacionada