web-dev-qa-db-fra.com

Lancement d'un fichier .sh à partir d'un lanceur

Je suis assez nouveau sur Ubuntu 14.04. Je fais un projet d'école où j'ai besoin d'utiliser des piles de navigation. À ce stade, la navigation fonctionne correctement. Mon problème en ce moment est:
Avant de pouvoir lancer rviz et pour effectuer la navigation, je dois exécuter les commandes suivantes:

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/*  

Il y a quelques commandes supplémentaires que je dois exécuter, mais je pense que vous obtenez l'image.
À ce stade, je dois saisir manuellement toutes ces commandes dans le terminal. Je les ai ajoutés à un fichier Shell que je peux lancer manuellement.

Je voudrais savoir s'il est possible d'exécuter ce fichier Shell à partir d'un .launch fichier. De la même manière qu'un nœud est lancé à partir d'un .launch fichier.
.

roslaunch navigation2d_example move_base.launch

Le nom de mon fichier Shell est: mobi_mani.sh Le code à l'intérieur est:

#!/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/* " 

Longue histoire courte.
Comment puis-je exécuter les commandes indiquées dans un .sh fichier d'un .launch fichier?
Puis-je également obtenir des commentaires sur l'écran de mon terminal? donc je sais ce qui se passe.

Toutes mes excuses pour mon anglais, je suis néerlandais.
Merci d'avance!

1
Gijs de Vries

Vous faites référence à un .desktop fichier. Ces fichiers peuvent être utilisés pour exécuter des commandes, des applications, etc.

La version la plus basique d'un .desktopfichier:

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

Dans votre cas, vous souhaitez exécuter une série de commandes, en utilisant Sudo. Dans ce cas, vous avez besoin de:

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

Vous devez enregistrer le fichier avec l'extension .desktop, par exemple. run_commands.desktop. Pour utiliser ces fichiers à partir du bureau, rendez-les exécutables.

Explication

  • Pour utiliser des commandes compliquées dans un .desktopfile, le Exec= la ligne devrait ressembler à:

    Exec=/bin/bash -c "command1&&command2&&command3"
    
  • pour enchaîner les commandes dans un .desktop fichier, comme si chaque commande se trouvait sur une nouvelle ligne dans un script, vous devez utiliser && entre les commandes.

  • Si vous utilisez Sudo dans une commande, vous devez soit définir:

    Terminal=true
    

    donc les commandes s'exécuteront dans le terminal et vous demanderont le mot de passe, ou vous devez utiliser gksu au lieu de Sudo, donc gksu vous demandera votre mot de passe. Dans ce cas, vous devrez installer gksu, qui n'est pas par défaut sur votre système:

    Sudo apt-get install gksu
    

Si la commande est trop compliquée ou trop longue à gérer dans un fichier .desktop

Si votre série de commandes est trop longue à gérer dans un .desktop fichier, écrivez-les dans un petit script, comme vous l'avez fait, et appelez le script à partir du .desktop fichier. Le Exec= ligne dans le .desktop le fichier devrait alors ressembler à:

Exec=/bin/sh mobi_mani.sh

EDITER si vous devez exécuter des commandes dans le terminal

Vous pouvez également utiliser les éléments suivants pour exécuter des commandes à partir du terminal:
Réglez dans le .desktopfichier en tant que Exec= ligne:

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

Ensuite, en supposant que vous utilisez gnome-terminal, allez dans Préférences (gnome-terminal)> Préférences de profil> Titre et commande, puis dans la liste déroulante "Une fois la commande terminée"> gardez le terminal ouvert:

enter image description here

Cela ne peut pratiquement pas échouer.

1
Jacob Vlijm