Autor Tópico: Abrir e usar terminal a partir de outro terminal  (Lida 8436 vezes)

Offline brunopio

  • Usuário Ubuntu
  • *
  • Mensagens: 6
    • Ver perfil
Abrir e usar terminal a partir de outro terminal
« Online: 06 de Junho de 2011, 11:32 »
Parece meio confuso? Vou tentar explicar:
Escrevi um script pra pingar um site (ex.: google) de 1 em 1 minuto, e se falhar, reinicia.
Neste script, quero abrir um outro terminal que abra um programa em python, somente uma única vez, e se falhar, reinicia.
Mas porquê? Se no meu script usar apenas 1 terminal e abrir o programa em python, não consigo fazer com que o ping continue de 1 em 1 minuto. Usando 2 terminais, pelo menos manualmente, eu sei que dá pra rodar o ping e o programa python ao mesmo tempo.
Será que tem como fazer?

Offline druidaobelix

  • Usuário Ubuntu
  • *
  • Mensagens: 5.552
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #1 Online: 06 de Junho de 2011, 12:22 »
Olá brunopio,


Vê se é isso que v. quer:

Abra um shell normal em Ctrl+Atl+T, que é onde vai replicar, e deixe de lado;

Agora abre um terminal dentro do terminal

Torne ativo o desktop e tecle Alt+F2

Na caixa digite gnome-terminal e tecle Enter

write nome_de_usuario

Você vai obter nesse terminal:

write: user is logged in more than once; writing to pts/0

Naquele primeiro que foi aberto estará (claro que com o seu nome de usuário):

Message from user@hal9000 on pts/1 at 12:08 ...

O que você digitar naquele terminal do write aparecerá no outro terminal.

Talvez seja mais ou menos isso que v. quer.

Se v. é um scripter, talvez fosse mais adequado estar postando na seção "Programação e Scripts", onde teria audiência mais qualificada as suas necessidades, e não em Iniciantes, já que este, por definição, é o "lugar para dar seus primeiros passos", e certamente dar os primeiros passos não é aprender a fazer script. :-)

[]'s

Editando:
Para maiores detalhes, não deixe de ver:

man write
« Última modificação: 06 de Junho de 2011, 12:31 por druidaobelix »
www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

Offline platao

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 5.052
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #2 Online: 06 de Junho de 2011, 12:28 »
Movido.
\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

Offline brunopio

  • Usuário Ubuntu
  • *
  • Mensagens: 6
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #3 Online: 06 de Junho de 2011, 12:49 »
Obrigado druidaobelix! E desculpe-me, realmente "Programação e Scripts" é o melhor lugar.
Mas eu estava pensando em algo do tipo "meuscript.sh":

Código: [Selecionar]
#!/bin/sh
funcaoping ()
{
echo "ping google:"
ping -c 1 -w 10 www.google.com
if [ $? -eq 0 ]
then
echo "ping ok."
else
reboot
fi
sleep 2
}
echo "Começando..."
gnome-terminal --command cd pasta1; python teste.py
while true
do
funcaoping
done

E ao rodar, recebo o erro: "Houve um erro ao criar um processo filho para este terminal. Falha ao executar processo filho "cd" (Arquivo ou diretório não encontrado)"
 :'(

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #4 Online: 06 de Junho de 2011, 13:15 »
É só colocar um sinal tironiano (&) no final da linha, com isso o bash vai rodar aquele comando em um subshell
Código: [Selecionar]
#!/usr/bin/env bash

#Procure usar o caminho absoluto mesmo com o programa no path
python caminho/absoluto/ate/o/script.py &

Offline brunopio

  • Usuário Ubuntu
  • *
  • Mensagens: 6
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #5 Online: 06 de Junho de 2011, 13:46 »
É só colocar um sinal tironiano (&) no final da linha, com isso o bash vai rodar aquele comando em um subshell
Código: [Selecionar]
#!/usr/bin/env bash

#Procure usar o caminho absoluto mesmo com o programa no path
python caminho/absoluto/ate/o/script.py &

Mesmo com as alterações, ainda não roda...

Código: [Selecionar]
#!/usr/bin/env bash
funcaoping ()
{
echo "ping google:"
ping -c 1 -w 10 www.google.com
if [ $? -eq 0 ]
then
echo "ping ok."
else
reboot
fi
sleep 2
}
echo "Começando..."
gnome-terminal --command python home/eu/pasta1/teste.py &
while true
do
funcaoping
done

Agora abre somente o console do python, mas não roda teste.py de forma automática:
Código: [Selecionar]
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
:'(

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #6 Online: 06 de Junho de 2011, 18:27 »
Você precisa de um emulador ativo (ou seja, você precisa ver ou digitar alguma coisa)? Porque, se não sabe e/ou não compreendeu o exemplo, você pode rodar o python, ou qualquer outro programa, em um subshell diretamente.
Agora abre somente o console do python, mas não roda teste.py de forma automática:
O -e/--command aceita somente um argumento.
Tente delimitar
Código: [Selecionar]
gnome-terminal -e 'python home/eu/pasta1/teste.py' &

Se ele não aceitar, adicione o shebang no script python pra poder executa-lo diretamente.

Offline brunopio

  • Usuário Ubuntu
  • *
  • Mensagens: 6
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #7 Online: 06 de Junho de 2011, 22:40 »
Você precisa de um emulador ativo (ou seja, você precisa ver ou digitar alguma coisa)? Porque, se não sabe e/ou não compreendeu o exemplo, você pode rodar o python, ou qualquer outro programa, em um subshell diretamente.
Agora abre somente o console do python, mas não roda teste.py de forma automática:
O -e/--command aceita somente um argumento.
Tente delimitar
Código: [Selecionar]
gnome-terminal -e 'python home/eu/pasta1/teste.py' &

Se ele não aceitar, adicione o shebang no script python pra poder executa-lo diretamente.

Pois é, eu não preciso ver e muito menos preciso digitar algo.
Mas quando eu testei:
Código: [Selecionar]
gnome-terminal -e python 'home/eu/pasta1/teste.py' &
Deu na mesma... abre somente o console do python, mas não roda teste.py de forma automática, tenho que digitar o teste.py. Adicionar o shebang no script python deu na mesma também... quando eu fui testar o reboot, também deu erro, dizendo que precisa de autorização (mesmo com chmod +x meuscript.sh)...
o.0
Só um detalhe: sou totalmente noob em script (este é meu primeiro script)!
=)
Mas pelo visto, o que eu quero fazer não deve poder ser feito...
=(

Código: [Selecionar]
#!/usr/bin/env bash
funcaoping ()
{
echo "ping google:"
ping -c 1 -w 10 www.google.com
if [ $? -eq 0 ]
then
echo "ping ok."
else
reboot
fi
sleep 2
}
echo "Começando..."
gnome-terminal -e python 'home/eu/pasta1/teste.py' &
while true
do
funcaoping
done

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #8 Online: 06 de Junho de 2011, 23:59 »
Só um detalhe: sou totalmente noob em script (este é meu primeiro script)!

Ah... deu pra perceber, você não intendeu metade do que falei...
Novamente, se não precisa interagir, pra quê chamar o emulador gnome-terminal?! Segue a sugestão da minha primeira mensagem.

Mas pelo visto, o que eu quero fazer não deve poder ser feito...

Pode, é só seguir as recomendações (nada de colocar ou trocar o local das coisas).

Offline brunopio

  • Usuário Ubuntu
  • *
  • Mensagens: 6
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #9 Online: 08 de Junho de 2011, 07:28 »
Então...

Código: [Selecionar]
#!/usr/bin/env bash
funcaoping ()
{
echo "ping google:"
ping -c 1 -w 10 www.google.com
if [ $? -eq 0 ]
then
echo "ping ok."
else
reboot
fi
sleep 2
}
echo "Começando..."
python 'home/eu/pasta1/teste.py' &
while true
do
funcaoping
done

Parece funcionar dentro de usr/local/bin! Mas o teste.py usa pyopencl. Quando usando o script, o teste.py não reconhece pyopencl, mas manualmente no terminal reconhece. Falta alguma coisa pra fazer?

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Abrir e usar terminal a partir de outro terminal
« Resposta #10 Online: 08 de Junho de 2011, 16:50 »
O problema está no seu programa. Pegue as mensagens de erro, depois do script e antes do sinal tironiano coloque &> /tmp/script.log
Código: [Selecionar]
#!/usr/bin/env bash

#Procure usar o caminho absoluto mesmo com o programa no path
python caminho/absoluto/ate/o/script.py &> /tmp/script.log &

Ai você executa e olha o que aparece no arquivo.