
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
grep
pode 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 sudoers
configuração permitir que você execute o grep
comando além daquele cat
:
if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
echo found
else
echo not found
fi
-q
diz grep
para 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.