OVH Cloud OVH Cloud

scripts

16 réponses
Avatar
jjlm
Bonjour,
Je débute sous Mac (OS X 10.4) depuis peu et j'ai du mal à comprendre
cette histoires de scripts...
Par exemple, j'ai mon scanner, agfa scanvise 1212u, reconnu par l'os sans
soucis. J'ai installé le programme trouvé sur le site d'agfa... Ca
fonctionne bien ! Le truc c'est que dans le paquet, y a des scripts. Je ne
sais pas ou les installés et comment on s'en sert. Nombreux sont les
logiciels à avoir des scripts, que l'on doit installer soi même... Et
là, c'est le flou pour moi. Merci de m'éclairer un peu.
Sinon je cherche un logiciel pour faire de belles pochettes de CD.

6 réponses

1 2
Avatar
pere.noel
JPaul wrote:

Dans le cas d'un script ruby, je ne sais pas, mais il doit bien y avoir
une commande équivalente. Tiens nous au courant.


j'ai fait ça avec un AppleScript :

on run
tell application "Finder"
set this_scpt to the selection as alias
set this_item to container of this_scpt
end tell
set mypath to posix_path(this_item)
--display dialog of mypath
--set the clipboard to mypath
tell application "Terminal"
activate
with timeout of 1800 seconds
do script with command "cd " & mypath & " ; ls
-al"
tell window 1
set background color to "black"
set cursor color to "green"
set normal text color to "yellow"
set bold text color to "red"
set title displays shell path to true
--set title displays window size to true
--set title displays device name to true
set title displays file name to true
set title displays custom title to true
--set custom title to "bozo"
set number of columns to 120
set number of rows to 40
end tell
end timeout
end tell
end run

on posix_path(mac_path)
set mac_path to (mac_path as text)
set root to (offset of ":" in mac_path)
set rootdisk to (characters 1 thru (root - 1) of mac_path)
tell application "Finder"
if (disk (rootdisk as string) is the startup disk) then
set unixpath to "/" & (characters (root + 1)
thru end of mac_path)
else
set unixpath to "/Volumes:" & mac_path
end if
end tell
set chars to every character of unixpath
repeat with i from 2 to length of chars
if item i of chars as text is equal to "/" then
set item i of chars to ":"
else if item i of chars as text is equal to ":" then
set item i of chars to "/"
else if item i of chars as text is equal to "'" then
set item i of chars to "'"
else if item i of chars as text is equal to """ then
set item i of chars to "" & """
else if item i of chars as text is equal to "*" then
set item i of chars to "*"
else if item i of chars as text is equal to "?" then
set item i of chars to "?"
else if item i of chars as text is equal to " " then
set item i of chars to " "
else if item i of chars as text is equal to "" then
set item i of chars to "\"
end if
end repeat
return every item of chars as string
end posix_path


celui-là ne fait qu'un ls -al dans le dossier là où il se trouve.

demain je chercherai une solution en *.command
--
une bévue

Avatar
pere.noel
JPaul wrote:

Dans le cas d'un script ruby, je ne sais pas, mais il doit bien y avoir
une commande équivalente. Tiens nous au courant.


bon c'est comme tu l'expliques :
--- script ruby SVGPlayer.command ----
#!/usr/bin/ruby
system("open /Applications/Utilities/Terminal.app; java -cp
build/classes com.kitfox.svg.app.SVGPlayer;")
-------------------------------

ça marche impec ET, cerise sur le gateau, ce ne me lance qu'UNE SEULE
fenêtre de terminal, contrairement à "l'équivalent" AppleScript qui en
lance deux...

donc en résumé, c'est extrêmemnt simple, suffit d'ajouter la "ligne"
"open /Applications/Utilities/Terminal.app;" devant la commande java ou
autre, ça marche aussi pour le lancement d'un autre script ruby...

ce que je ne pige pas c'est comment le Terminal "sait" que la suite de
"open /Applications/Utilities/Terminal.app;" est pour lui...

m'enfin ça marche impec.
--
une bévue

Avatar
blanc
Une bévue wrote:

bon c'est comme tu l'expliques :
--- script ruby SVGPlayer.command ----
#!/usr/bin/ruby
system("open /Applications/Utilities/Terminal.app; java -cp
build/classes com.kitfox.svg.app.SVGPlayer;")


OK. J'avais pas compris que tu voulais que le script fasse la commande.
Je croyais que tu voulais que le term reste ouvert afin de pouvoir taper
une commande quelconque. C'est pourquoi je t'ai proposé de terminer par
un exec /bin/bash. Et tu dois pouvoir le faire à la place de ta commande
java ...
Mais si c'est cette commande précise que tu veux lancer, ta solution est
nettement meilleure.

ça marche impec ET, cerise sur le gateau, ce ne me lance qu'UNE SEULE
fenêtre de terminal, contrairement à "l'équivalent" AppleScript qui en
lance deux...


Oui. Et puis avec l'AppleScript, on a plutôt l'impression de prendre un
marteau-pilon pour enfoncer un clou ;-)

donc en résumé, c'est extrêmemnt simple, suffit d'ajouter la "ligne"
"open /Applications/Utilities/Terminal.app;" devant la commande java ou
autre, ça marche aussi pour le lancement d'un autre script ruby...

ce que je ne pige pas c'est comment le Terminal "sait" que la suite de
"open /Applications/Utilities/Terminal.app;" est pour lui...


En fait amha :

1) C'est le fait de dbl-cliquer sur ton fichier .command qui lance le
Term. Ton "open /Applications/Utilities/Terminal.app" ne fait donc
presque rien en vertu du principe MacIntosh que l'ouverture d'une appli
déjà ouverte ne fait que la passer au premier plan.

2) Par contre le Terminal reçoit en outre l'ordre d'exécuter ton fichier
SVGPlayer.command
Plus exactement c'est le shell lancé avec le T qui reçoit cet ordre.

3) Le shell trouve la première ligne de ton script :
#!/usr/bin/ruby

Ce qui signifie qu'il doit en fait lancer cette appli Ruby (dont le
chemin est /usr/bin/ruby) en lui demandant de lire et exécuter ton
script.

4) La commande system est interprétée par Ruby comme une demande de
lancer un nouveau shell et de lui faire exécuter la suite de commandes
données en argument (et séparées par des point-virgules).

5) Donc ce nouveau shell exécute :
open /Applications/Utilities/Terminal.app # aucun effet (cf. 1)
java -cp build/classes com.kitfox.svg.app.SVGPlayer # ce que tu
souhaites...

Si je récapitule, ton dbl-clic a lancé successivement :

Terminal --> shell --> ruby --> shell2 --> (open ; java)

Amha on devrait pouvoir simplifier en

Terminal --> shell --> shell2 --> java

Pour ce faire, je te suggère de remplacer simplement le contenu de ton
fichier SVGPlayer.command par les deux lignes qui suivent :

-------------------------------
#!/bin/bash
java -cp build/classes com.kitfox.svg.app.SVGPlayer
-------------------------------

Eventuellement rajoute la troisième ligne suivante :

-------------------------------
exec /bin/bash
-------------------------------

si tu souhaites conserver la main dans la fenêtre du Terminal.

Tiens nous au courant.

JPaul.

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

Avatar
pere.noel
JPaul wrote:

Tiens nous au courant.


bon merci pour toutes tes explications.

effectivement le "open /Applications/Utilities/Terminal.app; " est
inutile vu que le *.command ouvre déjà un term.

par contre :
--------------------------------------------------------------------
#!/bin/bash
java -cp build/classes com.kitfox.svg.app.SVGPlayer
--------------------------------------------------------------------
il y a un retour à la ligne à la fin de la dernière ligne

là j'ai une erreur et rien n'est lancé :
[m~/CVS/svgsalamander> /Users/yvon/CVS/svgsalamander/SVGPlayer.command;
exit
zsh: no such file or directory:
/Users/yvon/CVS/svgsalamander/SVGPlayer.command
[L'opération a été arrêté - code d'arrêt 127]

j'utilise zsh par défaut c'est peut-être le prob aussi j'ai changé en :
--------------------------------------------------------------------
#!/opt/local/bin/zsh
java -cp build/classes com.kitfox.svg.app.SVGPlayer
--------------------------------------------------------------------

et là ça roule IMPEC...

la version ruby est ok :
--------------------------------------------------------------------
#!/usr/bin/ruby
system("java -cp build/classes com.kitfox.svg.app.SVGViewer;")
--------------------------------------------------------------------

en fait après l'éxécution du script je ne souhaite pas prendre la main
mais simplement lire System.out et System.err dans le term (messages de
la classe lancée).

--
une bévue

Avatar
blanc
Une bévue wrote:

--------------------------------------------------------------------
#!/bin/bash
java -cp build/classes com.kitfox.svg.app.SVGPlayer
--------------------------------------------------------------------
il y a un retour à la ligne à la fin de la dernière ligne


Oui. C'est le problème avec certains éditeurs de texte qui ne le
rajoutent pas systématiquement...

là j'ai une erreur et rien n'est lancé :
[m~/CVS/svgsalamander> /Users/yvon/CVS/svgsalamander/SVGPlayer.command;
exit
zsh: no such file or directory:
/Users/yvon/CVS/svgsalamander/SVGPlayer.command
[L'opération a été arrêté - code d'arrêt 127]

j'utilise zsh par défaut c'est peut-être le prob aussi j'ai changé en :
--------------------------------------------------------------------
#!/opt/local/bin/zsh
java -cp build/classes com.kitfox.svg.app.SVGPlayer
--------------------------------------------------------------------

et là ça roule IMPEC...


Normalement le shell utilisé dans un script n'a pas besoin d'être le
même que le shell interactif que tu utilises. Probablement un problème
de chemin qui n'est pas dans le PATH ?... Un cd qu'il faudrait faire
avant le java ?...
Ce qui est bizarre c'est que l'erreur est signalée par zsh. Ce qui sous-
entend que la commande jave doit elle même lancer des scripts ou faire
des appels du type de "system" de ruby.


la version ruby est ok :
--------------------------------------------------------------------
#!/usr/bin/ruby
system("java -cp build/classes com.kitfox.svg.app.SVGViewer;")
--------------------------------------------------------------------


Oui, mais comme je le disais précédemment, tu lances un process de plus
inutilement (ruby).

en fait après l'éxécution du script je ne souhaite pas prendre la main
mais simplement lire System.out et System.err dans le term (messages de
la classe lancée).


Ok.

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

Avatar
pere.noel
JPaul wrote:

Oui, mais comme je le disais précédemment, tu lances un process de plus
inutilement (ruby).


je ne l'ai donné que pour exemple, seul truc bizarre donc c'est que la
même ligne de commande :

java -cp build/classes com.kitfox.svg.app.SVGPlayer

lancée par #!/opt/local/bin/zsh c'est OK

lancée par #!/bin/bash ===> erreur

bon, mais de toutes façons c'est assez académique vu que j'utilise
toujours zsh comme script-langage pour les trucs simples et ruby pour le
reste.
--
une bévue

1 2