Oi Leandro,

Obrigado, agora funcionou e ficou ao mesmo tempo prático e elegante.

É interessante como é o raciocínio em shell-script, primeiro você demora 
um tempão para entender o problema (o que eu já tinha feito) depois 
ainda é necessário encontrar uma solução, e dpois ainda, uma maneira de 
implementá-la.

Aqui um resumo da solução para poder arquivar:

Leandro Santiago escreveu:
> Você deve declarar e executar a função dentro do subshell que o sudo
> executará.
> 
> COMANDO="function rkonq()
> {
>   export KDEROOTHOME=/home/alain/.kde0
>   konqueror --profile filemanagement
> }
> rkonq
> "
> sudo bash -c "$COMANDO"

Eu uso isto para ter um ícone (pintado de vermelho) que abre uma janela 
(com fundo vermelho) e poder acessar rapidamente configurações da máquina.

Grato,
Alain

> 
> E... Ah sim, você deve proteger as variáveis que sejam utilizadas dentro da
> função, por exemplo:
> 
> COMANDO="function rkonq()
> {
>   export KDEROOTHOME=/home/alain/.kde0
>   echo \$KDEROOTHOME #cifrão protegido
> }
> rkonq
> "
> sudo bash -c "$COMANDO"
> 
> 
> 2009/1/17 Julio C. Neves <[email protected]>
> 
>>   Fala Alain
>> até onde eu saiba, porém o bash é muito dinâmico e isso pode ter mudado,
>> além do *builtin* declare, existem 2 formas de vc especificar uma função:
>> function funcao
>> {
>> ...
>> }
>> ou:
>> funcao ()
>> {
>> ...
>> }
>>
>> Como vc
>> fez:
>> function funcao ()
>> creio que seu erro está aí. Experimente tirar os parenteses ou o function.
>> --
>> Abração,
>> Julio
>> *Cursos de Shell e Zenity nos finais de semana:
>> - Em SP ligue (11) 2125-4747;
>> - Em DF ligue (61) 3223-3000;
>> - Turmas fechadas em outras cidades ligue (21) 8112-9988
>> *
>>
>> 2009/1/17 Alain M. <[email protected] <alainm%40pobox.com>>
>>
>>
>>> Tento este script:
>>>
>>> function rkonq()
>>> {
>>> export KDEROOTHOME=/home/alain/.kde0
>>> konqueror --profile filemanagement
>>> }
>>> sudo rkonq
>>>
>>> Me retorna este erro:
>>>
>>> sudo: rkonq: command not found
>>>
>>> Como faço para chamar uma função com sudo???
>>>
>>> Grato,
>>> Alain
>>> PS: eu consegui fazer com dois scrips, um chamando o outro, mas gostaria
>>> de fazer tudo com um script só...
>>>

Responder a