#1 Le 02/03/2016, à 15:59
- pierretipe
Regrouper plusieurs lignes de commandes
Bonjour,
je voulais savoir s'il était possible de regrouper plusieurs lignes de commandes pour ne plus avoir a en taper qu'une seule.
J'explique mon problème:
Je dois taper 3 lignes de commandes dans le terminal Ubuntu
1) cd Bureau
2) tesseract photo.jpg output
3) python programme.py
Est-il possible de créer un fichier contenant ces 3 commandes pour n'avoir a taper qu'une seule ligne de commande ou juste un raccourci clavier?
Merci de votre réponse
Dernière modification par pierretipe (Le 02/03/2016, à 16:00)
Hors ligne
#2 Le 02/03/2016, à 16:31
- pingouinux
Re : Regrouper plusieurs lignes de commandes
Bonjour,
Tu peux regrouper les commandes dans un script, ou faire un alias.
alias ma_commande='cd Bureau; tesseract photo.jpg output; python programme.py'
Pour lancer les 3 commandes
ma_commande
Hors ligne
#3 Le 02/03/2016, à 17:27
- pierretipe
Re : Regrouper plusieurs lignes de commandes
Merci beaucoup pour cette réponse très rapide!
Je comprend le principe de l'alias, mais est-ce que j'aurais a le retaper à chaque ouverture du terminal? ou alors la simple écriture de ma_commande suffira a exécuter les 3 lignes?
Et qu'entends tu par script?
Merci beaucoup de prendre du temps pour répondre à mes questions, je ne maîtrise pas totalement Linux, mais il m'intéresse beaucoup.
Hors ligne
#4 Le 02/03/2016, à 17:41
- pingouinux
Re : Regrouper plusieurs lignes de commandes
Pour que l'alias soit défini à chaque ouverture de terminal, tu ajoutes sa définition à la fin du fichier ~/.bash_aliases
Un script est un fichier qui va contenir les 3 commandes. Pour le créer
echo 'cd Bureau; tesseract photo.jpg output; python programme.py' >mon_script
et pour lancer les commandes
. mon_script
Hors ligne
#5 Le 02/03/2016, à 17:43
- Sciensous
Re : Regrouper plusieurs lignes de commandes
On commence tous de rien
l'alias est temporaire à moins de recopier la ligne dans un fichier dédié (caché):
.bash_aliases
qui se trouve dans ton Home
(attention au point devant b )
un script est un programme (simple à écrire, d'où script surement) automatisant des taches
(qui peuvent etre lancées dans un terminal)
edit: pinguinux a sorti le bec avant moi, mais je complete:
le script doit commencer par la suite de caracteres #!/bin/sh
(ou #!/bin/bash ... )
Et pour faire propre terminer par un exit 0;
et pour le lancer: sh CheminEtNomDu script
(sh correspondant au /bin/sh plus haut)
Dernière modification par Sciensous (Le 02/03/2016, à 17:52)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 02/03/2016, à 18:14
- jplemoine
Re : Regrouper plusieurs lignes de commandes
et pour le lancer: sh CheminEtNomDu script
(sh correspondant au /bin/sh plus haut)
Ben non...
Il faut lui mettre les droits d’exécution (1 fois pour toutes)
chmod a+x CheminEtNomDuscript
et le lancer par
CheminEtNomDuscript
Attention : il faut toujours mettre le chemin... Donc, s'il est dans le répertoire courant, il faut mettre
./NomDuscript
NB : Si tu le lances comme tu l'as indiqué, il est lancé par sh sans tenir compte de la première ligne..
Il faut donc connaître le bon lanceur...
Dernière modification par jplemoine (Le 02/03/2016, à 18:14)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#7 Le 02/03/2016, à 18:26
- Sciensous
Re : Regrouper plusieurs lignes de commandes
ben si...
ce que je dis marche et j'ai bien préciser sh si /bin/sh
enfin je n'ai pas parlé du chmod +x puisqu'au départ pinguinux proposait un echo "script"> fichier; difficile d'y incure le"je rends executable" là dedans...
Dernière modification par Sciensous (Le 02/03/2016, à 18:26)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#8 Le 02/03/2016, à 18:35
- pingouinux
Re : Regrouper plusieurs lignes de commandes
La permission d'exécution est inutile si on le lance ainsi
sh mon_script
. mon_script
source mon_script
Les deux dernières formes exécutent le script dans le shell courant, ce qui permet de conserver l'effet du cd à la sortie du script.
Hors ligne
#9 Le 02/03/2016, à 18:52
- jplemoine
Re : Regrouper plusieurs lignes de commandes
Sauf que :
- si le script est en bash ou en perl par exemple, ça ne fonctionne pas !!!!
- je ne vois pas l'intérêt de mettre le lanceur en 1ère ligne si c'est pour ne pas l'utiliser ensuite... (post #5)
---> c'est complètement illogique.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#10 Le 02/03/2016, à 19:04
- pingouinux
Re : Regrouper plusieurs lignes de commandes
C'était pour préciser les choses. Après, chacun fait comme il l'entend…
Hors ligne
#11 Le 02/03/2016, à 19:53
- Watael
Re : Regrouper plusieurs lignes de commandes
hmm, il y a quand même de meilleures conduites que d'autres; notamment sur le mode d'exécution d'un script.
sourcer un script induit un risque potentiel d'altération de l'environnement courant.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#12 Le 02/03/2016, à 20:51
- pierretipe
Re : Regrouper plusieurs lignes de commandes
Merci pour vos réponses, vous m'avez un peu perdu, mais je vais essayer d'y voir plus clair demain après-midi. Je vous tiendrais au courant de l'avancée de mon problème
Hors ligne
#13 Le 02/03/2016, à 21:15
- MicP
Re : Regrouper plusieurs lignes de commandes
[peut-être Hors sujet]
…
1) cd Bureau…
Il y a sans doute quelque chose qui m'échappe : Je cherche à comprendre l’intérêt (pas uniquement pour ce script mais de façon générale) de changer de répertoire,
car l'accès aux programmes comme aux fichiers (source ou/et cible) est indépendant du répertoire depuis lequel la commande va être lancée.
[/peut-être Hors sujet]
Dernière modification par MicP (Le 02/03/2016, à 21:22)
Hors ligne
#14 Le 02/03/2016, à 21:41
- pierretipe
Re : Regrouper plusieurs lignes de commandes
Nous écrivons CD Bureau car la ligne avec tesseract (logiciel d'ocr) analyse l'image photo.jpg (présente sur le bureau) et renvoie le contenu dans le fichier texte output qu'il enregistre sur le bureau. Cela nous évite de chercher le fichier output dans nos dossiers
Hors ligne
#15 Le 02/03/2016, à 21:59
- Watael
Re : Regrouper plusieurs lignes de commandes
bof, bof.
rep="$HOME/Bureau"
commande "$rep"/{input,output}File
dans un script un peu plus sophistiqué, ça peut devenir compliqué de savoir dans quel répertoire se déroule l'exécution du script; donc, on met le chemin dans une variable... les différents chemins étant dans des variables différentes, c'est plus clair.
si je n'y suis pas obligé (compilation, essentiellement), je n'utilise pas cd.
Dernière modification par Watael (Le 02/03/2016, à 21:59)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#16 Le 02/03/2016, à 22:18
- MicP
Re : Regrouper plusieurs lignes de commandes
@ pierretipe Merci pour ta réponse.
Pourquoi ne pas indiquer sur la ligne de commande un chemin (absolu ou relatif) pour le fichier de sortie en utilisant l'option de la commande outbase ?
Voir :
man tesseract
Rien n'empêche non plus d'indiquer le chemin du fichier source.
S'il n'y avait pas eu cette option (outbase) il est toujours possible d'utiliser (dans un script comme en ligne de commandes) les redirections de sortie > ou/et >>
=======
… je n'utilise pas cd. …
+1
Moi non plus, jamais dans un script (c'est pas que l'on m'y ait obligé, c'est simplement parce que je suis fainéant) et pratiquement jamais en ligne de commandes.
Dans les scripts (comme en ligne de commande), la définition d'une variable au début du script est tellement plus facile à gérer que d'avoir à rechercher dans le script à quel endroit le chemin n'a pas été mis à jour…
Dernière modification par MicP (Le 02/03/2016, à 22:27)
Hors ligne
#17 Le 03/03/2016, à 14:53
- pierretipe
Re : Regrouper plusieurs lignes de commandes
Pour que l'alias soit défini à chaque ouverture de terminal, tu ajoutes sa définition à la fin du fichier ~/.bash_aliases
Un script est un fichier qui va contenir les 3 commandes. Pour le créer
echo 'cd Bureau; tesseract photo.jpg output; python programme.py' >mon_script
et pour lancer les commandes
. mon_script
Merci pour cette méthode, je viens de tester en appelant le script e. Comme l'objectif principal était de gagner du temps, je n'ai plus qu'a écrire . e
Hors ligne