Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/03/2016, à 16: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, à 17:00)

Hors ligne

#2 Le 02/03/2016, à 17: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, à 18: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, à 18: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, à 18:43

Sciensous

Re : Regrouper plusieurs lignes de commandes

On commence tous de rien wink

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)
cool

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, à 18:52)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#6 Le 02/03/2016, à 19:14

jplemoine

Re : Regrouper plusieurs lignes de commandes

Sciensous a écrit :

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, à 19:14)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#7 Le 02/03/2016, à 19: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...
tongue

Dernière modification par Sciensous (Le 02/03/2016, à 19:26)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#8 Le 02/03/2016, à 19: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, à 19: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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#10 Le 02/03/2016, à 20: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, à 20: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.

Hors ligne

#12 Le 02/03/2016, à 21: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, à 22:15

MicP

Re : Regrouper plusieurs lignes de commandes

[peut-être Hors sujet]

pierretipe a écrit :


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, à 22:22)

Hors ligne

#14 Le 02/03/2016, à 22: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, à 22: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, à 22:59)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 02/03/2016, à 23: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 >>

=======

Watael a écrit :

… 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, à 23:27)

Hors ligne

#17 Le 03/03/2016, à 15:53

pierretipe

Re : Regrouper plusieurs lignes de commandes

pingouinux a écrit :

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