Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[INFO + 2Q] Fermeture fenêtre Terminal en fin de shell-script

12 réponses
Avatar
blanc
Bonjour à tous,

Peut-être le connaissez-vous déjà, mais comme je l'ai perso cherché
plusieurs fois en vain, je pense qu'il peut être utile à plusieurs.

Voici donc le moyen que j'ai trouvé de fermer la fenêtre du Terminal (et
de quitter celui-ci si c'est la seule fenêtre ouverte) en fin
d'exécution d'un shell-script que l'on aurait lancé par un double-clic
(fichier xxx.command).

Bien sûr, il existe la solution de créer à partir du T un fichier
xxx.term (par Fichier --> Enregistrer sous) après avoir coché la case
"fermeture en fin de script" et de modifier ce fichier par éditeur afin
qu'il lance l'exécution du script en question :

<http://groups.google.fr/group/fr.comp.os.mac-os.x/msg/d33c7bca8b0b39c8?
hl=fr&>

Mais cette solution est assez complexe et nécessite d'avoir deux
fichiers (le .term et le .command) pour chaque script, et je voulais
éviter cela.

La solution que je propose consiste à rajouter les lignes suivantes
(appel à Applescript) à la fin du script ou avant un éventuel exit :

osascript -e 'tell application "Terminal"
set nb to count of windows
if nb > 1 then close first window
if nb <= 1 then quit
end tell' &

Supprimez la quatrième ligne (et le test nb>1) si vous ne souhaitez pas
quitter le T.

Deux questions maintenant :

1) Pourquoi ne puis-je pas mettre de else dans le "if-statement",
contrairement à ce qui est indiqué ici :

<http://developer.apple.com/documentation/AppleScript/Conceptual/AppleSc
riptLangGuide/index.html>,

et ceci aussi bien avec osascript que dans l'Editeur de Script ?

2) Dans certaines circonstances, si le T est déjà ouvert, le lancement
par double-clic ne fonctionne pas (et ceci aussi bien avec un .term
qu'un .command). Quelqu'un sait-il pourquoi, et comment y remédier ?

JPaul.

--
/==/==\\-\ Jean-Paul BLANC
/ /--/--//\\ quelque-part (somewhere)
|/| L |\\\ en (in)
\/|| = |||\\\ FRANCE

10 réponses

1 2
Avatar
Patrick Stadelmann
In article <1hwq4om.1s6x73mmacbk0N%,
(JPaul) wrote:

1) Pourquoi ne puis-je pas mettre de else dans le "if-statement",
contrairement à ce qui est indiqué ici :


Si tu veux un else il faut écrire :

if ... then
...
else
...
end

Patrick
--
Patrick Stadelmann

Avatar
blanc
Patrick Stadelmann wrote:

Si tu veux un else il faut écrire :

if ... then
...
else
...
end


Avec le script :

tell application "Terminal"
set nb to count of windows
if nb > 1 then close first window
else quit
end
end tell

j'obtiens l'erreur de syntaxe suivante sur le mot "else" :

"end" ou "end tell" prévu mais "else" trouvé.

et c'est pareil si je mets "end if" à la place de "end" comme indiqué
dans la page déjà citée, mais mal citée. Voici la bonne adresse :

<http://developer.apple.com/documentation/AppleScript/Conceptual/AppleSc
riptLangGuide/AppleScript.b5.html>

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
blanc
JPaul wrote:

Voici la bonne adresse :

<http://developer.apple.com/documentation/AppleScript/Conceptual/AppleSc
riptLangGuide/AppleScript.b5.html>


J'ajouterais que cette page est extraite d'un guide (voir adresse donnée
au premier post) qui se dit à utiliser avec "AppleScript version 1.3.4
or later" et la version annoncée par mon Editeur de Script est 1.10.7.

Alors ?
- 1.10.7 n'est-il pas "later than" 1.3.4 ?
- y a-t-il eu un remaniement profond du langage qui aurait modifié la
syntaxe structurée du "if...then...else" indiquée dans le guide
ci-dessus ? et pour la remplacer par une syntaxe moins structurée ou
dans laquelle le "else" n'est pas possible ?

J'avoue ne pas comprendre.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
blanc
JPaul wrote:

Voici la bonne adresse :

<http://developer.apple.com/documentation/AppleScript/Conceptual/AppleSc
riptLangGuide/AppleScript.b5.html>


J'ajouterais que cette page est extraite d'un guide (voir adresse donnée
au premier post) qui se dit à utiliser avec "AppleScript version 1.3.4
or later" et la version annoncée par mon Editeur de Script est 1.10.7.

Alors ?
- 1.10.7 n'est-il pas "later than" 1.3.4 ?
- y a-t-il eu un remaniement profond du langage qui aurait modifié la
syntaxe structurée du "if...then...else" indiquée dans le guide
ci-dessus ? et pour la remplacer par une syntaxe moins structurée ou
dans laquelle le "else" n'est pas possible ?

J'avoue ne pas comprendre.

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
Anonyme
JPaul wrote:

tell application "Terminal"
set nb to count of windows
if nb > 1 then close first window
else quit
end
end tell


tell application "Terminal"
set nb to count of windows
if nb > 1 then
close first window
else
quit
end
end tell

--
Anonyme ( jayce <@> mosx.net )
********* MosX.net <http://www.mosx.net/&gt; *********
(avec un put§@#* de problème DNS sur le domaine mosx.net)

Avatar
Patrick Stadelmann
In article <1hwsnzk.1te7jkp1ecmkhvN%,
(JPaul) wrote:

- 1.10.7 n'est-il pas "later than" 1.3.4 ?


Il l'est.

- y a-t-il eu un remaniement profond du langage qui aurait modifié la
syntaxe structurée du "if...then...else" indiquée dans le guide
ci-dessus ? et pour la remplacer par une syntaxe moins structurée ou
dans laquelle le "else" n'est pas possible ?


Non, voir la réponse de Jayce. La syntaxe :

if (cond) then (statement)

est valide mais ne peut pas être suivie d'un "else".

Patrick
--
Patrick Stadelmann

Avatar
blanc
Anonyme wrote:

tell application "Terminal"
set nb to count of windows
if nb > 1 then
close first window
else
quit
end
end tell


OK. Merci. J'en déduis donc qu'il n'y a pas équivalence entre espace et
saut-ligne comme en C. Ce qui n'était pas évident a priori.

J'ai toujours trouvé que la syntaxe d'AppleScript n'allait pas de soit.
Ca se confirme.

Merci à toi et à Patrick.

Avez-vous une réponse à ma seconde question ?

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
Anonyme
JPaul wrote:


Avez-vous une réponse à ma seconde question ?


Non, désolé.

--
Anonyme ( jayce <@> mosx.net )
********* MosX.net <http://www.mosx.net/&gt; *********
(avec un put§@#* de problème DNS sur le domaine mosx.net)

Avatar
francois.jacquemin
JPaul wrote:

Bonjour à tous,

Peut-être le connaissez-vous déjà, mais comme je l'ai perso cherché
plusieurs fois en vain, je pense qu'il peut être utile à plusieurs.

Voici donc le moyen que j'ai trouvé de fermer la fenêtre du Terminal (et
de quitter celui-ci si c'est la seule fenêtre ouverte) en fin
d'exécution d'un shell-script que l'on aurait lancé par un double-clic
(fichier xxx.command).



Pourquoi ne pas plutôt faire un script qui n'ouvre pas le Terminal ?


JPaul.



--
F. J.

Avatar
blanc
François Jacquemin wrote:

Pourquoi ne pas plutôt faire un script qui n'ouvre pas le Terminal ?


Heu... oui. C'est exactement la question que j'ai posé ici :
Message-ID: <1hwvfco.1iewqji40f4vsN%

JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

1 2