como executar uma função como root no shell script

3

exatamente eu quero fazer um script e adicioná-lo ao atalho do atalho ...
quando eu clico duas vezes no ícone, ele irá aparecer uma janela de terminal (pronto)

no terminal, ele pedirá a senha do root no começo.
e, em seguida, fazer algumas coisas com privilégios de root (eu faço isso como uma função) ..
depois disso, no final do script, fechará a janela
como "pressione qualquer tecla para fechar a janela" (eu posso fazer isso)

#!/bin/sh
touchpad(){
    whoami
}
sudo -S touchpad # but it return error "command not found"

como executar uma função como usuário root?
ou há outra maneira de fazer isso?

EDITAR:
vou tentar isso     #! / bin / bash

sudo ./main2.sh #this not work when i make it as a launcher
exit 

este é o meu código atual (depois de googling):

#!/bin/bash

gksudo -m "Input Password" clear
sudo whoami
#sudo bla bla bla
read -n 1 -p "Press any key to close window"

isto é o que eu quero, mas tenho erro se eu digitar a senha errada por 3 vezes ..
como forçar a sair da janela principal se o gksudo falhar ??

    
por Egy Mohammad Erdin 11.05.2011 / 07:02

4 respostas

2

Teste o valor de retorno do gksudo:

if ! gksudo -m "Input Password" clear ; then
    echo Bad password
    exit 1
fi
    
por psusi 11.05.2011 / 17:22
1

Você não pode. Para fazer isso, você precisa colocar a função em outro script e executar esse script com o sudo.

O Sudo só executa comandos, não pode acessar funções dentro do seu script, pois ele é executado em um processo separado. Se você insistir em executar uma função em seu script, poderá executar o script novamente com sudo, mas passará um argumento com $1 que executa a função diretamente.

    
por Egil 11.05.2011 / 08:32
0

que tal usar o gksudo? Ele solicitará ao usuário a digitação da senha. Então deve funcionar apenas com sudo.

    
por Paulius Šukys 11.05.2011 / 07:12
0

IMHO ... A maneira mais simples de executar o script inteiro como root sem ter que lembrar que ele precisa ser executado como root Parece que deve funcionar para o que você está tentando realizar

#!/bin/bash
dScript=$0
if [[ ${UID} -gt 0 ]] ; then
    sudo ${dScript}
    exit
fi
### the rest of your script
    
por george Barbaz 10.01.2016 / 23:18

Tags