Pourquoi mes scripts shell sont par défaut en non-interactif?

Tags: #<Tag:0x00007ff71eed53d8>

Salut, j’ai créé sur mon bureau un script test.sh comme ceci :

#!/bin/bash
echo "$# $@"
echo "$# $@" > output.txt
read -p "Appuyer sur ENTRÉE pour continuer" </dev/tty

J’ai donné les droits d’exécution avec chmod +x test.sh.

Si je double-clique dessus, le fichier output.txt est créé, il contient (comme attendu) la chaîne suivante : 0 (un zéro suivi d’un espace) mais je ne vois pas s’afficher de fenêtre avec le echo tout simple ni le « Appuyez sur ENTREE pour continuer ».

Je soupçonne que le shell utilisé est un shell non interactif, mais je suis surpris car le #!/bin/bash du début est censé ouvrir bash qui est un shell interactif… Qu’est-ce que je fais mal ? Ou qu’est-ce que je ne comprends pas ?

Je précise à toutes fins utiles que mon bureau est sous Plasma, des fois que ça ait une importance dans l’exécution des scripts shell par double-clic.

Bonjour,

#!/bin/bash
echo "$# $@"
echo "$# $@" > output.txt
echo "Appuyer sur ENTRÉE pour continuer" 
read

Pas mieux. À noter que le read est juste là pour avoir une touche à presser avant que la fenêtre (qui ne s’ouvre pas :laughing:) se ferme.

Je précise aussi que quand on lance ce même script depuis un shell ouvert, tout se passe bien, le résultat s’affiche et il attend que j’appuie sur ENTREE :

$ ./test.sh toto titi
2 toto titi
Appuyer sur ENTRÉE pour continuer
$

Oui ça en a pour faire un lanceur compris par plasma.
A mon avis, il faut donner un chemin complet à ‹ output.txt › et lancer un terminal.
Tu peux créer un fichier test.desktop soit avec le contenu du script, ou appel à un script test.sh

test.desktop

[Desktop Entry]
Type=Application
Exec=xterm -hold -title "test.sh" -e bash -c 'echo "$# $@"; echo "$# $@" > /tmp/output.txt; read -p "Appuyer sur ENTRÉE pour continuer" </dev/tty'

Ah, je pensais que lancer un script shell dans bash lançait automatiquement une fenêtre de terminal (c’est l’habitude de lancer un .bat sous Windows qui ouvre automatiquement cmd.exe).

Du coup je comprends que je dois lancer explicitement un terminal (xterm dans ton example), avec le script .sh à exécuter donné en argument.

Par curiosité, je lis que xterm est un terminal pour X. Moi je suis sous Wayland, et même si je sais que Wayland a un module pour afficher les clients X, j’ai regardé quels terminaux étaient natifs Wayland : il y a konsole que j’ai déjà, mais aussi des tas d’autres. D’où ma question suivante : existe-t-il sur Debian un genre de point d’entrée « générique » pour lancer un terminal, au lieu d’en imposer un « en dur » dans mon script ? Je pense à un truc qui fonctionnerait comme editor, qui est une commande générique pour l’éditeur de texte choisi par l’utilisateur (commande update-alternatives). Histoire de faire un script qui soit portable sur un autre PC qui n’aurait pas les mêmes terminaux que moi.

foot devrait faire l’affaire en tant que terminal ultra léger.
Je l’utiliserais si j’utilisais wayland.

foot 686,0 KB
↳ Fast, lightweight and minimalistic Wayland terminal emulator

 Depends: libc6 libfcft4t64 libfontconfig1 libpixman-1-0 libutf8proc3 
     libwayland-client0 libwayland-cursor0 libxkbcommon0 ncurses-term

Voir systemsettings > applications par défaut
xterm

Mais j’utilise konsole en terminal principal / multi-tab.