Eu hackeei este script bash que testa se o usuário tem privilégios de superusuário e, se não, ele os solicita. Por fim, estou tentando inverter a segunda instrução 'if' para que eu possa remover as duas linhas a seguir (o echo "password ok" e o else na linha a seguir)
# Root user only
if [[ "$EUID" != 0 ]]; then
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
O propósito de "true" na quarta linha é apenas uma declaração nula?
Preciso inverter o teste na quarta linha, como faço? Aqui está o que eu tentei:
if sudo false; then
if sudo true == false; then
if [!(sudo true)]; then
true
in bash não é uma palavra-chave, é um programa que sai instantaneamente com um código de saída bem-sucedido. Da mesma forma,false
é um programa que sai com um código de saída malsucedido.Você pode tentar isso executando ambos os programas em seu terminal e lendo a
$?
variável, que contém o código de saída do último programa;if sudo true
não é equivalente aif sudo == true
.if sudo true
está executando otrue
programa usandosudo
e verificando o código de saída.Portanto:
if sudo false; then
está executando o programafalse
como sudo. O retorno será sempre falso.if sudo true == false
executará o programatrue
com os argumentos==
efalse
usandosudo
. Isso obviamente não é o que você pretendia.if [!(sudo true)]
é uma sintaxe inválida.O que você provavelmente está procurando é
Eu sinto que a resposta aceita não respondeu à sua pergunta?
O objetivo de fazer isso é verificar se você realmente pode
sudo
.Como essa verificação é realizada é através do
true
programa, conforme explicado na resposta aceita.Como eu vejo neste script. É apenas verificar se o sudo está ativado, é isso.
true apenas retorna true.
Portanto, neste caso, se eles precisarem executar qualquer comando com sudo, ele verifica primeiro na inicialização, solicitando a senha apenas uma vez.
A condição funciona assim: se o sudo estiver executando o comando true corretamente, ele retornará true para a condição if, então o sudo está habilitado e o usuário digitou a senha corretamente, caso contrário você digitou a senha errada ou o sudo não está habilitado, o script não deve continuar.
Os outros comandos não precisam pedir a senha do sudo, pois sua autenticação é bem sucedida na primeira vez (mas isso depende da configuração do sudo, então esses scripts dependem muito da configuração do ambiente)
A 'senha de eco ok' demonstra isso também. o script de shell não pedirá mais a senha.