Iniciando um arquivo .sh de um iniciador

1

Eu sou relativamente novo no Ubuntu 14.04. Eu estou fazendo um projeto da escola onde eu preciso usar pilhas de navegação. Neste ponto, a navegação funciona bem. Meu problema neste momento é:
Antes que eu possa lançar rviz e fazer a navegação real, eu tenho que executar os seguintes comandos:

sudo mknod -m 666 /dev/ttyS51 c 4 115  
sudo socat PTY,link=/dev/ttyS51, TCP4:192.168.0.60:10002  
sudo chmod a=r+w /dev/pts/*  

Existem alguns comandos extras que preciso executar, mas acho que vocês entendem a foto.
Neste ponto, eu tenho que inserir manualmente todos esses comandos no terminal. Eu adicionei-os a um arquivo de shell que posso lançar manualmente.

Gostaria de saber se é possível executar esse arquivo shell a partir de um arquivo .launch . Da mesma forma que um nó é iniciado a partir de um arquivo .launch .
Isso tornaria muito mais fácil se eu pudesse adicionar um pedaço de código ao arquivo de inicialização existente para que esses comandos e o resto dos nós necessários para a navegação sejam executados quando eu inserir o seguinte comando:

roslaunch navigation2d_example move_base.launch

O nome do meu arquivo de shell é: mobi_mani.sh O código dentro é:

#!/bin/sh  
sudo mknod -m 666 /dev/ttyS51 c 4 115  
sudo socat PTY,link=/dev/ttyS51, TCP4:192.168.0.60:10002  
sudo chmod a=r+w /dev/pts/* " 

Longa história curta.
Como posso executar os comandos declarados em um arquivo .sh de um arquivo .launch ?
Além disso, posso obter feedback na tela do meu terminal? então eu sei o que está acontecendo.

Desculpas pelo meu inglês, eu sou holandês.
Obrigado antecipadamente!

    
por Gijs de Vries 21.05.2015 / 10:42

1 resposta

1

Você está se referindo a um arquivo .desktop . Esses arquivos podem ser usados para executar comandos, aplicativos etc.

A versão mais básica de um arquivo .desktop :

[Desktop Entry]
Name=Some Name
Exec=<command> 
Type=Application

No seu caso, você quer executar uma série de comandos, usando sudo . Nesse caso você precisa:

[Desktop Entry]
Name=Some Name
Exec=/bin/bash -c "command1&&command2&&command3"
Type=Application
Terminal=true

Você precisa salvar o arquivo com a extensão .desktop , por exemplo. %código%. Para usar esses arquivos da área de trabalho, torne-o executável.

Explicação

  • Para usar comandos complicados em um arquivo run_commands.desktop , a linha .desktop deve se parecer com:

    Exec=/bin/bash -c "command1&&command2&&command3"
    
  • para comandos em cadeia em um arquivo Exec= , como se cada comando estivesse em uma nova linha em um script, você precisa usar .desktop entre os comandos.

  • Se você usa && em um comando, é necessário definir:

    Terminal=true
    

    para que os comandos sejam executados no terminal e solicitem a senha, ou você precisa usar sudo em vez de gksu , portanto, sudo solicitará sua senha. Nesse caso, você teria que instalar o gksu , que não é por padrão no seu sistema:

    sudo apt-get install gksu
    

Se o comando for muito complicado ou longo demais para ser manipulado em um arquivo .desktop

Se a sua série de comandos for muito longa para manipular em um arquivo gksu , escreva-os em um script pequeno, como você fez, e chame o script do arquivo .desktop . A linha .desktop no arquivo Exec= deve se parecer com:

Exec=/bin/sh mobi_mani.sh

EDITAR se você precisar executar comandos no terminal

Você também pode usar o seguinte para executar comandos do terminal:
Defina no arquivo .desktop como .desktop line:

Exec=gnome-terminal -x /bin/bash -c "<command1>&&<command2>&&<command3>"

Em seguida, supondo que você use Exec= , vá para Preferências (gnome-terminal) > Preferências de perfil > Title & amp; Comando, em seguida, na lista suspensa "Quando o comando terminar" > mantenha o terminal aberto:

Isso praticamente não pode falhar.

    
por Jacob Vlijm 21.05.2015 / 14:00