#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,
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)
En 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
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.
En ligne
#7 Le 07/09/2024, à 11:59
- nany
Re : [Résolu] Formater du texte avec echo dans un script Bash
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
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
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 !
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.
En ligne
#11 Le 08/09/2024, à 04:10
- nany
Re : [Résolu] Formater du texte avec echo dans un script Bash
Bonjour,
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'"
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)
En ligne
#13 Le 08/09/2024, à 18:11
- Paco.grc
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'"
Parfait, merci
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...
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
...........
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)
En 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 ?
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
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
Hors ligne
#17 Le 09/09/2024, à 09:22
- Paco.grc
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 ?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.
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