O script Bash que precisa de raiz só é executado quando eu digito exit!

0

Eu fiz um script bash que precisa de permissão root, que eu posso rodar como root! Mas, o script só é executado quando estou usando o terminal como root e, se eu digitar exit, ele será executado. Quando eu digito:

bash lights_infinity.sh

O terminal não faz nada. Por que isso é assim e é normal? O código é

#!/bin/bash

sudo su
while true
do
    sudo -k setleds -D +caps < /dev/console
    sleep 0.1
    sudo -k setleds -D +caps < /dev/console
    sleep 0.1
    sudo -k setleds -D -caps < /dev/console
    sleep 0.1
done

Preciso remover os comandos do sudo?

    
por Ubuntulover 07.03.2016 / 19:24

1 resposta

5

Eu gostaria

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
while true
do
    setleds -D +caps < /dev/console
    sleep 0.1
    setleds -D +caps < /dev/console
    sleep 0.1
    setleds -D -caps < /dev/console
    sleep 0.1
done

e faça isso:

sudo lights_infinity.sh

(adicione o -k se você quiser matar o período de 15 minutos para o sudo, mas não deve ser necessário)

O motivo pelo qual você precisa da "saída" é devido ao "sudo su" que você usou. Isso abre um shell extra que você precisa "sair".

  • extra: verifique se há "root" no início do arquivo. Se isso for executado por 15 minutos, poderá ocorrer um erro (não seguro); se assim for, adicione "sudo" aos "setleds" e ele irá parar e perguntar a senha.
  • extra2: 3 vezes "setleds -D + (/ -) caps < / dev / console sleep 0.1 "parece melhor quando você usa uma função. E o loop while parecerá melhor se tiver uma saída mais agradável que control-x.
por Rinzwind 07.03.2016 / 19:45