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 07/09/2024, à 09:00

Paco.grc

[Résolu] Formater du texte avec echo dans un script Bash

Bonjour à tous,

J'aurais besoin d'un conseil concernant les scripts Bash et la fonction echo.

Voici un exemple de script Bash que j'ai réalisé :

#!/bin/bash
gnome-terminal --maximize --tab --title="Vidage de l'historique Bash" --command="bash -c 'cat /dev/null > ~/.bash_history && history -c && history -w && echo "Historique\ Bash\ effacé"; $SHELL'"

Le but est d'ouvrir Gnome Terminal, d'exécuter un certain nombre de commandes dans un ordre précis tout en ne passant à la commande suivante que si la précédente a réussie. Le terminal reste ouvert une fois les commandes exécutées.

Le script fonctionne mais je n'arrive pas à mettre en forme le texte avec la fonction echo.
Par exemple : si je souhaite un retour à la ligne (\n Historique\ Bash\ effacé) ou appliquer une couleur (\033[1;31m Historique\ Bash\ effacé \033[0m), le script ne se lance tout simplement pas.
echo renvoie donc du bien le texte mais je n'arrive pas à le formater selon mes souhaits.

Sauriez-vous comment formater du texte avec echo dans un script Bash ?
J'ai également essayé avec echo -e, printf, tput et l'utilisation de variables mais sans succès.
Qu'est-ce qui fonctionne chez vous avec Ubuntu 24.04 ?

Bien à vous,
Paco

Dernière modification par Paco.grc (Le 09/09/2024, à 09:23)

Hors ligne

#2 Le 07/09/2024, à 10:04

nany

Re : [Résolu] Formater du texte avec echo dans un script Bash

Bonjour,



Paco.grc a écrit :

Qu'est-ce qui fonctionne chez vous avec Ubuntu 24.04 ?

Chez moi, echo -e fonctionne. Seulement il faut échapper les double-quotes :

gnome-terminal --maximize --tab --title="Vidage de l'historique Bash" --command="bash -c 'cat /dev/null > ~/.bash_history && history -c && history -w && echo -e \"\033[1;31mHistorique Bash effacé.\033[0m\"; $SHELL'"

En ligne

#3 Le 07/09/2024, à 10:49

RaphaelG

Re : [Résolu] Formater du texte avec echo dans un script Bash

J'ai pas l'impression que l'echo de nany fonstionne :

~$ echo -e \"\033[1;31mHistorique Bash effacé.\033[0m\"
"033[1
31mHistorique: command not found
~$

Comme on échappeé le double quote, le point virgule est considéré par le shell comme un séparateur de commande.

Moi je propose de ne pas mettre les double quote" et dans ce cas il faut échapper les back slashes et le point virgule.

~$ echo -e \\033[1\;31mHistorique Bash effacé.\\033[0m
Historique Bash effacé.
~$

Vous ne le voyez pas mais la ligne "Historique Bash effacé." est bien en rouge sur mon terminal.

Après, je peux enchainer par une autre commande en insérant un point virgule :

~$ echo -e \\033[1\;31mHistorique Bash effacé.\\033[0m ; ls
Historique Bash effacé.
bin      Documents  essai  Music     Public      sandbox  sysAdm     Videos
Desktop  Downloads  IT     Pictures  Recordings  snap     Templates  vimrc.dev
~$ 

"Historique Bash effacé." est toujours en rouge. Les répertoires affichés par ls sont en bleu mais c'est l'environnement d'un utilisateur lambda qui veut ça. (Ubuntu 24.04.1)

Dernière modification par RaphaelG (Le 07/09/2024, à 10:55)

Hors ligne

#4 Le 07/09/2024, à 10:51

ylag

Re : [Résolu] Formater du texte avec echo dans un script Bash

Bonjour,

Vu au #1 :

echo "Historique\ Bash\ effacé"

... je crois qu´il ne faudrait pas échapper les espaces :

echo "Historique Bash effacé"

?

Hors ligne

#5 Le 07/09/2024, à 10:51

nany

Re : [Résolu] Formater du texte avec echo dans un script Bash

RaphaelG a écrit :

J'ai pas l'impression que l'echo de nany fonstionne

Seulement si on exécute toute la ligne de commandes.

En ligne

#6 Le 07/09/2024, à 11:32

RaphaelG

Re : [Résolu] Formater du texte avec echo dans un script Bash

Tu as raison. J'ai été trop feignant pour taper toute la commande et en plus je ne voulais pas écraser mon historique. En fait je ne comprend pas tout mais je vais y réfléchir ... ;-)

Sinon les options de gnome-terminal --maximise et --tab ne sont elles pas incompatibles ? Chez moi, ça ouvre bien un nouvel onglet mais comme il est lancé dans un gnome-terminal non maximisé, l'option --maximinise est sans effet.

Hors ligne

#7 Le 07/09/2024, à 11:59

nany

Re : [Résolu] Formater du texte avec echo dans un script Bash

RaphaelG a écrit :

En fait je ne comprend pas tout mais je vais y réfléchir ... ;-)

Alors je tente d’expliquer.
La commande echo est déjà dans une paire de double-quotes  et le fait d’en mettre une autre paire à l’intérieur a pour effet de fermer prématurément la séquence pour en ouvrir une autre un peu après :

gnome-terminal --bla --bla --command="bash -c 'bla && bla && bla && echo -e "bla bla bla"; $SHELL'"

Si on échappe les doubles-quotes de l’echo, on instaure une espèce de hiérarchie et la première séquence est préservée :

gnome-terminal --bla --bla --command="bash -c 'bla && bla && bla && echo -e \"bla bla bla\"; $SHELL'"

 

Je ne sais pas si c’est très clair (on distingue à peine les couleurs que j’ai mises pour tenter de mettre en évidence).
Je ne sais d’ailleurs pas si mon explication est correcte car il  y a en plus une séquence entre single-quotes :

gnome-terminal --bla --bla --command="bash -c 'bla && bla && bla && echo -e \"bla bla bla\"; $SHELL'"

En ligne

#8 Le 07/09/2024, à 12:04

nany

Re : [Résolu] Formater du texte avec echo dans un script Bash

RaphaelG a écrit :

Sinon les options de gnome-terminal --maximise et --tab ne sont elles pas incompatibles ? Chez moi, ça ouvre bien un nouvel onglet mais comme il est lancé dans un gnome-terminal non maximisé, l'option --maximinise est sans effet.

Si on exécute la ligne de commandes par [Alt]+[F2], on a bien un nouveau terminal agrandi mais bien évidemment pas avec de multiples onglets. Il semble donc en effet qu’une des deux options est inutile selon la méthode de lancement.

En ligne

#9 Le 07/09/2024, à 19:12

Paco.grc

Re : [Résolu] Formater du texte avec echo dans un script Bash

nany a écrit :

Bonjour,



Paco.grc a écrit :

Qu'est-ce qui fonctionne chez vous avec Ubuntu 24.04 ?

Chez moi, echo -e fonctionne. Seulement il faut échapper les double-quotes :

gnome-terminal --maximize --tab --title="Vidage de l'historique Bash" --command="bash -c 'cat /dev/null > ~/.bash_history && history -c && history -w && echo -e \"\033[1;31mHistorique Bash effacé.\033[0m\"; $SHELL'"

Splendide ! big_smile

C'est parfait, j'arrive enfin à formater mon texte comme je le souhaite grâce à ta commande, c'est génial !

Merci beaucoup.

Puis-je abuser encore un peu ?

  • Comment faire un retour à la ligne sur le dernier echo qui termine le script ? Qu'il y ait une ligne vide avant que je puisse reprendre la main sur le terminal.

  • Si je comprends bien, si mon souhait lorsque j'exécute le script est simplement d'ouvrir un nouveau terminal maximisé, je peux me passer de l'option --tab, c'est bien cela ?

Dernière modification par Paco.grc (Le 07/09/2024, à 19:14)

Hors ligne

#10 Le 07/09/2024, à 23:50

RaphaelG

Re : [Résolu] Formater du texte avec echo dans un script Bash

Oui. Si tu n'utilises pas l'option --tab, tu obtiens une 2ème fenêtre qui te bouffe tout ton écran à cause de l'option --maximise.

Par contre chez moi, l'option --title ne marche pas. Le titre reste invariablement de la sorte : username@hostname:/working/directory
Qu'en est il chez vous ?

@nany : merci pour tes explications.

Hors ligne

#11 Le 08/09/2024, à 04:10

nany

Re : [Résolu] Formater du texte avec echo dans un script Bash

Bonjour,



Paco.grc a écrit :

Comment faire un retour à la ligne sur le dernier echo qui termine le script ? Qu'il y ait une ligne vide avant que je puisse reprendre la main sur le terminal.

En ajoutant « \n » au bon endroit :

gnome-terminal --maximize --title="Vidage de l'historique Bash" --command="bash -c 'cat /dev/null > ~/.bash_history && history -c && history -w && echo -e \"\033[1;31mHistorique Bash effacé.\033[0m\n\"; $SHELL'"

 



RaphaelG a écrit :

Par contre chez moi, l'option --title ne marche pas. Le titre reste invariablement de la sorte : username@hostname:/working/directory
Qu'en est il chez vous ?

Pareil chez moi.
En fait l’option fonctionne mais la dernière commande ($SHELL) change à nouveau le titre. Et, comme ça va très vite, on n’a pas le temps de s’en rendre compte.
Astuce pour voir le titre : insérer la commande « ; read » (qui attend alors l’appui sur la touche [Entrée] pour passer à la suite) juste avant « ; $SHELL ».

En ligne

#12 Le 08/09/2024, à 11:58

RaphaelG

Re : [Résolu] Formater du texte avec echo dans un script Bash

J'ai trouvé pourquoi l'option --title ne fonctionne pas.
Enfin si, elle fonctionne comme l'a fait remarquer nany mais notre .barshrc  force une autre valeur :

~$ cat .bashrc
......
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
....
~$

Dernière modification par RaphaelG (Le 08/09/2024, à 12:01)

Hors ligne

#13 Le 08/09/2024, à 18:11

Paco.grc

Re : [Résolu] Formater du texte avec echo dans un script Bash

nany a écrit :

Bonjour,

Paco.grc a écrit :

Comment faire un retour à la ligne sur le dernier echo qui termine le script ? Qu'il y ait une ligne vide avant que je puisse reprendre la main sur le terminal.

En ajoutant « \n » au bon endroit :

gnome-terminal --maximize --title="Vidage de l'historique Bash" --command="bash -c 'cat /dev/null > ~/.bash_history && history -c && history -w && echo -e \"\033[1;31mHistorique Bash effacé.\033[0m\n\"; $SHELL'"

Parfait, merci wink


Concernant l'option --title : elle fonctionne bien mais il est vrai que le titre disparait une fois la commande exécutée.
J'ai d'autres scripts qui m'ont permis de le vérifier car ils comportent plus de commandes et le temps d’exécution est plus long.

Je ne sais pas s'il existe un moyen de faire perdurer ce titre une fois le script achevé.
Si j'enlève l'option ; $SHELL à la fin, le terminal est censé se refermer une fois le script terminé.
Dans la pratique, si je la supprime, le script ne s’exécute carrément plus. Bizarre...

RaphaelG a écrit :

Oui. Si tu n'utilises pas l'option --tab, tu obtiens une 2ème fenêtre qui te bouffe tout ton écran à cause de l'option --maximise.

Par contre chez moi, l'option --title ne marche pas. Le titre reste invariablement de la sorte : username@hostname:/working/directory
Qu'en est il chez vous ?

@nany : merci pour tes explications.

Je viens d'enlever --tab car est en fait, c'est toujours une nouvelle fenêtre qui se lance (je la lance avec un raccourci clavier).
Et si je lance le script à partir du terminal déjà ouvert, cela s'ouvre de toutes façons dans un nouvel onglet.

Dernière modification par Paco.grc (Le 08/09/2024, à 18:12)

Hors ligne

#14 Le 09/09/2024, à 01:07

RaphaelG

Re : [Résolu] Formater du texte avec echo dans un script Bash

Paco.grc a écrit :

...........
Concernant l'option --title : elle fonctionne bien mais il est vrai que le titre disparait une fois la commande exécutée.
J'ai d'autres scripts qui m'ont permis de le vérifier car ils comportent plus de commandes et le temps d’exécution est plus long.

Je ne sais pas s'il existe un moyen de faire perdurer ce titre une fois le script achevé.
............

Il suffit que tu supprimes les 7 lignes que j'ai affichées ou mieux, mets un "#" au début de ces 7 lignes pour les passer en commentaires comme cela si il y a des effets de bord fâcheux, il te sera facile de revenir en arrière.
Moi, je ne l'ai pas fait parce que finalement je le trouve très bien ce titre imposé par le .bashrc.

Dernière modification par RaphaelG (Le 09/09/2024, à 01:07)

Hors ligne

#15 Le 09/09/2024, à 01:30

Watael

Re : [Résolu] Formater du texte avec echo dans un script Bash

je ne vois pas très bien l'intérêt de cette manipulation de l'historique, autant simplement supprimer le fichier avant de lancer le shell.
mais pourquoi faire simple quand on peut faire compliqué, n'est-ce pas ? smile

gnome-terminal --tab --title='Vidage de l'historique Bash' --command='/bin/bash -c "test -s ~/.bash_history && rm ~/.bash_history && echo \"Historique supprimé\"; read -p \"Press Enter\"; /bin/bash"'

le read c'est pour observer le changement de titre. Tu pourras le supprimer.

Dernière modification par Watael (Le 09/09/2024, à 01:32)


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

En ligne

#16 Le 09/09/2024, à 09:17

Paco.grc

Re : [Résolu] Formater du texte avec echo dans un script Bash

RaphaelG a écrit :
Paco.grc a écrit :

...........
Concernant l'option --title : elle fonctionne bien mais il est vrai que le titre disparait une fois la commande exécutée.
J'ai d'autres scripts qui m'ont permis de le vérifier car ils comportent plus de commandes et le temps d’exécution est plus long.

Je ne sais pas s'il existe un moyen de faire perdurer ce titre une fois le script achevé.
............

Il suffit que tu supprimes les 7 lignes que j'ai affichées ou mieux, mets un "#" au début de ces 7 lignes pour les passer en commentaires comme cela si il y a des effets de bord fâcheux, il te sera facile de revenir en arrière.
Moi, je ne l'ai pas fait parce que finalement je le trouve très bien ce titre imposé par le .bashrc.

Merci bien pour cette astuce smile

Hors ligne

#17 Le 09/09/2024, à 09:22

Paco.grc

Re : [Résolu] Formater du texte avec echo dans un script Bash

Watael a écrit :

je ne vois pas très bien l'intérêt de cette manipulation de l'historique, autant simplement supprimer le fichier avant de lancer le shell.
mais pourquoi faire simple quand on peut faire compliqué, n'est-ce pas ? smile

gnome-terminal --tab --title='Vidage de l'historique Bash' --command='/bin/bash -c "test -s ~/.bash_history && rm ~/.bash_history && echo \"Historique supprimé\"; read -p \"Press Enter\"; /bin/bash"'

le read c'est pour observer le changement de titre. Tu pourras le supprimer.

C'est un script qui se lance avec un raccourci clavier.
Je trouve cela assez pratique.

Après, j'ai d'autres scripts bien plus utiles avec lesquels je rencontrais les mêmes problèmes de mise en forme avec la commande echo. J'ai jugé plus pratique de se plancher sur ce cas dans le forum car il est très court.

Dans tous les cas, merci à vous tous pour vos précieux conseils.

Hors ligne

#18 Le 09/09/2024, à 13:27

Watael

Re : [Résolu] Formater du texte avec echo dans un script Bash

C'est un script qui se lance avec un raccourci clavier.
Je trouve cela assez pratique.

je n'en doute pas, c'est le cat et les history, qui me chagrinent. smile

je peux aussi critiquer "mon" rm, qui serait mieux remplacé par

mv --backup --suffix=$(date +.%F_%T) --target-directory=/chemin/backupDir ~/.bash_history

Dernière modification par Watael (Le 09/09/2024, à 13:30)


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

En ligne