Rodar executável pelo shell e fechar terminal [RESOLVIDO]

13. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 13/06/2014 - 13:03h

Qual o tipo do arquivo "rainlander2"? É um script ou um executável nativo?

Eu não esperaria que uma aplicação gráfica nativa lhe pedisse senha no terminal, e muito menos que morresse se o terminal fosse fechado. Mas se "rainlander2" for um script que toma certas medidas antes de executar a aplicação real, esse script possa ser alterado para, no momento certo, executar de modo independente do terminal.

Portanto, o que mostra a saída de “file `which rainlendar2`”?


  


14. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 13/06/2014 - 14:35h

se eu entendo, vc quer executar o script, em segundo plano sem abrir o terminal é isso?

o que acontece se tenta renomear e executar assim:

corrija o script, deixe assim:

#!/bin/sh
# copiarain.
killall rainlendar2
sudo cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics
rainlendar2
exit

agora, se não o fez, renomeie com extensão sh, tipo copiarain.sh

agora faça um atalho para ele, no atalho, coloque este comando:

sh copiarain.sh &&

depois clique com o botão direito nesse atalho, propriedades, e torne o atalho "executável",

acho quw com linha d esudo, sempre precisará de terminal aberto,

se servir para você, que seu aplicativo abra o terminal automático, depois execute e feche o terminal, faça o atalho com este comando:


NOME -e bash -c 'SGRAFICO pkill -9 rainlendar2 && cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics && rainlendar2 && exit; exec bash'

Onde NOME é o nome do seu emulador de terminal, gnome-terminal no GNOME e konsole no KDE, e SGRAFICO é o sudo gráfico correspondente: kdesu (no KDE) ou gksu (no GNOME). se quiser, substitua "pkill -9" por "killall".

se vc quiser adapte para executar seu script, tipo:
NOME -e bash -c ' SGRAFICO ./copiarain && exit; exec bash'

teste e me diga se funcionou.



15. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

José Carlos Taveira
taveirajc

(usa Outra)

Enviado em 13/06/2014 - 15:04h

Paulo.

A senha é solicitada no terminal é por causa do comando sudo cp........
O programa Rainlendar é um calendário customizável muito bom para lembretes.
Existe a versão Linux e Windows. Está instalada a versão Linux.
O site fornece a versão .deb para instalação.
Em resposta ao comando which rainlendar2 usr/bin/rainlendar2.

Obrigado.

J.Carlos




16. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

José Carlos Taveira
taveirajc

(usa Outra)

Enviado em 13/06/2014 - 15:21h

Paulo.
Vou detalhar a situação.
Sua sugestão tbm não deu certo.

O arquivo de script está com o nome copiarain.sh no Desktop.
Dentro deste arquivo tem os seguintes comandos:

#!/bin/sh
killall rainlendar2
sudo cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics
rainlendar2
exit

Na linha 2 eu fecho o calendário que está aberto para poder copiar o arquivo com o comando cp na linha seguinte.
A cópia é feita certinha, mas a linha rainlendar2 não chama o programa.

Na sua sugestão eu criei um arquivo que através do botão direito no desktop e selecionei a opção Criar novo lançador aqui. Dei o nome de COPIA. na linha de comando eu digitei
sh rainlendar2.sh &

Quando dou dois cliques nesse segundo arquivo criado (copia), o calendário é fechado mas não é aberto de volta.

Deu pra entender?

Obrigado.

J.Carlos




17. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 13/06/2014 - 15:31h

O comando era não somente
which rainlendar2 
, mas sim
file `which rainlendar2` 
. Mas deixemos isso para lá, agora.


Você poderia reescrever completamente seu script para não precisar de terminal, de modo a executá-lo diretamente do ambiente gráfico. Veja se algo como abaixo funciona.

#!/bin/bash

killall rainlendar2

# kdesudo (ou gksudo) pedem senha no próprio ambiente gráfico.
if ! \
kdesudo -comment "Digite sua senha para permitir a cópia do arquivo." \
-c "
cp /caminho/de/origem/arquivo /caminho/de/destino &&
chown `id -u` /caminho/de/destino/arquivo
"
# O comando complexo acima copia o arquivo e restaura a permissão
# para o seu usuário (suponho que seja não-root).
then
if ! \
kdialog --warningyesno \
"A cópia não foi realizada. Deseja prosseguir com arquivo atual?"
then
exit 1
fi
fi

exec rainlendar2 "$@"



18. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

José Carlos Taveira
taveirajc

(usa Outra)

Enviado em 13/06/2014 - 16:41h

Oi Paulo.

A solução está quase.

A sua última solução não deu certo.
A que deu certo foi a sua penúltima sugestão.(veja abaixo o arquivo de script)
Agora o programa fecha e abre, mas o arquivo não está sendo copiado.
Tente descobrir ai porque o arquivo Default.ics não está sendo copiado.
Estava copiando normalmente somente com o comando sudo cp ....... Só que pedia senha.


#!/bin/sh
killall rainlendar2
sudo sh -c 'cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics' &&
chown ' `id -u` ' /home/taveira/.config/.rainlendar2/Default.ics
exec rainlendar2 "$@"

Obrigado.

J.Carlos




19. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 13/06/2014 - 17:04h

O kdesudo e o kdialog estão instalados na sua máquina? Se você usa somente o GNOME, pode ser que não estejam. Ou você os instala (como parte do KDE), ou os troca, respectivamente, pelo gksudo e zenity.

Em tempo: nós estamos lhe ajudando, mas você deve saber que frases como "tente descobrir aí", neste fórum e em outros espaços públicos como este, beiram a falta de educação. Nós estamos tentando ajudar você, mas você tem de fazer a sua parte também, que é a de pelo menos ver -- e nos dizer -- as mensagens de erro que aparecem quando o script executa. Se você não souber como se faz isso, pode perguntar; o que não pode é exigir que saibamos o que acontece com um programa que não conhecemos numa máquina que não vemos e cuja configuração não conhecemos.


20. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

José Carlos Taveira
taveirajc

(usa Outra)

Enviado em 13/06/2014 - 17:56h

Se estou pedindo ajuda é porque além de tentar outros lugares, eu não domino o Linux. Estou querendo largar o Windows, mas alguma coisa ainda pega.
De qualquer forma, se não for possível, muito obrigado.
Valeu.

J.Carlos



21. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 13/06/2014 - 18:08h

Vc tentou com sudo gráfico, como paulo falou?

se seu ambiente gráfico é KDE, é kdesudo e se é GNOME é gksudo.
se não estiver funcionando com a senha de usuário, para usar senha de root, troque

"kdesudo" por "kdesu"
OU
"gksudo" por "gksu"

e o paulo lembrou, em gnome, instale o pacote zenith e no KDE, o pacote kdialog.


22. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

José Carlos Taveira
taveirajc

(usa Outra)

Enviado em 13/06/2014 - 18:16h

Albfneto.

Estou usando o Mint 17 com cinnamon.
Então não sei se é gksudo ou outra coisa.
A solução do Paulo está quase.
Não está copiando o arquivo.
Não seria a sintaxe da linha do comando cp?
Seria aspas simples, duplas ou crase?

Valeu amigo.
Eu sou novo no Linux e em sites de forum.
Qualquer coisa, desculpe ai.

J.Carlos



23. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 13/06/2014 - 18:31h

o ponto chave é o "sudo", é onde seu script "tá parando" qundo o sudo fica "esperando" a senha, num terminal, ele "pára" e não copia.
e no seu outro teste, o calendário não reabriu, embora tenha copiado. acho que é por causa de ter ficado em "sudo logado", entendeu? o calendário não abriu "sob sudo", o comando chown do paulo, te trouxe de volta às permissões antes do sudo.

sudo é comando de shell, ele precisa de terminal.

Não é a sintaxe do cp,o problema, porque copiava antes.

o que está acontecendo é que sudo é comando de shell, ele precisa de terminal.
não está havendo permissão do sudo rodar, porisso sem permissão de cópia, vc fica, aí não copia.

porisso te sugerimos sudo gráfico, ele usa as variáveis de ambiente tiradas direto do ambiente gráfico, e não necessáriamente precisa de terminal aberto. mas pode usar terminal aberto.

e sim, Cinammon é um fork do GNOME Shell ele usa gksu (senha de root) e gksudo.

1) para testar,se o sudo gráfico funciona no seu linux abra um terminal e use como comando para sua "etapa de cópia":

$ gksudo cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics

"gksudo" no lugar de "sudo" e veja se copiou.

2) se copiou, se o que está em 1) funcionou,
o Script do Paulo, mudado para gksudo, vai ficar assim:


!/bin/bash

killall rainlendar2

# kdesudo (ou gksudo) pedem senha no próprio ambiente gráfico.
if ! \
gksudo -comment "Digite sua senha para permitir a cópia do arquivo." \
-c "
cp /media/taveira/SISTEMA/Users/taveira/.rainlendar2/Default.ics /home/taveira/.config/.rainlendar2/Default.ics &&
chown `id -u` /home/taveira/.config/.rainlendar2/Default.ics
"
# O comando complexo acima copia o arquivo e restaura a permissão
# para o seu usuário (suponho que seja não-root).
then
if ! \
zenith --warningyesno \
"A cópia não foi realizada. Deseja prosseguir com arquivo atual?"
then
exit 1
fi
fi

exec rainlendar2 "$@"


se não tiver gksudo no seu micro, antes instale os pacotes chamados "gksu" e "zenith"




24. Re: Rodar executável pelo shell e fechar terminal [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 13/06/2014 - 18:58h

Num outro exemplo meu, eu tenho um script que executa aceleradores preload e prelink. A diferença do seu é que no meu, ele precisa sudo para executar desde o início.
No terminal, eu abriria o terminal e executaria:

$ sudo sh acelera.sh OU
$ sudo ./acelera.sh

Fiz um atalho para ele e não rodava, por causa de precisar do "sudo", o sudo precisava de terminal aberto

como fiz? fiz com sudo gráfico. Fiz o atalho e o "comando" do atalho é:

konsole -e bash -c 'kdesudo sh /home/albfneto/Desktop/PACOTES/acelerador/acelera.sh && exit; exec bash'

onde> konsole é meu terminal, konsole, pois é KDE.
-e bash , executa no bash
-c de "command"
kdesudo , sudo gráfico, pq o meu é KDE.
sh /home/albfneto/Desktop/PACOTES/acelerador/acelera.sh executa meu script,no caminho, path, dele
o primeiro & , executa e se o terminal fechar, continua executando.
o segundo & quando acaba o comando, executa o comando seguinte...
o comando seguinte: exit fecha o terminal

Resultado, eu clico no atalho, ele abre uma janela, pede senha (de usuario, pois é kdesudo), entro com a senha, ele abre automático o terminal, executa o script, acabou o script (pois o script tem uma linha de exit no final) ele fecha o terminal sózinho.

funcionando como eu queria.



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts