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ó...
>>>