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

osacript depuis un shell ?

6 réponses
Avatar
unbewusst.sein
depuis un script shell j'aimerais lancer un osascript, j'y parviens,
avec le bon résultat pour ce test simple, mais une floppée d'injures...

le script (ruby) :
#! /opt/local/bin/ruby1.9
# encoding: utf-8

r = `/usr/bin/osascript <<END
on get_alias_original(a)
tell application "Finder"
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original("HD:Users:yt:Menu:Desk:Calculette")
o
END`

puts "r = #{r}"

le résultat les injures prévues :
2010-05-14 16:06:42.432 osascript[19364:903] Error loading
/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition:
dlopen(/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition, 262): no
suitable image found. Did find:
/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition: no matching
architecture in universal wrapper osascript: OpenScripting.framework -
scripting addition "/Users/yt/Library/ScriptingAdditions/Default Folder
X Addition.osax" declares no loadable handlers.

à peu près la même chose pour "ScriptingAdditions/List & Record
Tools.osax" et "ScriptingAdditions/Property List Tools.osax"

mais, tout de même j'obtiens le *bon* résultat :

r = /Applications/Calculator.app/

peut on éviter les injures si oui comment ?

but, inavoué de la manip : lancer un script shell par osascript do shell
script lequel script shell une authentification, j'ai vérifié que :

set r to do shell script "mon script.zsh|rb" with administrator
privileges
r

ouvre une fenêtre d'authentification ce qui évite de mettre un password
"en dur"... et puis alerte l'utilisateur.
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)

6 réponses

Avatar
Patrick Stadelmann
In article <1jihovc.12trv4511o581uN%,
(Une Bévue) wrote:

à peu près la même chose pour "ScriptingAdditions/List & Record
Tools.osax" et "ScriptingAdditions/Property List Tools.osax"



Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.

Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.

Patrick
--
Patrick Stadelmann
Avatar
unbewusst.sein
Patrick Stadelmann wrote:


Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.

Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.



Ah ! OK, j'ai déjà eu ce pb d'architecture qqpart (avec MacTypes::Alias)
où j'ai du utiliser le shebang :

#!/usr/bin/arch -i386 ruby

qui ne marche pas avec ruby1.9 installé avec MacPorts...

en tk merci bien, c'est facile à contourner...

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Avatar
unbewusst.sein
Patrick Stadelmann wrote:

Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.




ça roule super quand je fais :

zsh-% ./osascript_test.rb 2> /dev/null
r = /Applications/Calculator.app/

ce qui nécessite d'avoir un second script pour lancer celui-ci avec la
redirection donc, j'ai essayé plutôt POpen4 :

status = POpen4::popen4(cmd) do |stdout, stderr|
puts "stdout : #{ stdout.read.strip }"
puts "stderr : #{ stderr.read.strip }"
end

puts "exitstatus : #{ status.exitstatus }"
puts "status.stopped? : #{ status.stopped? }"
puts "status.exited? : #{ status.exited? }"
puts "status.success? : #{ status.success? }"

avec :

cmd = "ls -al"

j'obtiens bien :
zsh-% ./popen4_test.rb
stdout : total 768
drwxr-xr-x 45 yt staff 1530 14 mai 17:57 .
drwxr-xr-x 50 yt staff 1700 14 mai 14:25 ..
-rw-r--r--@ 1 yt staff 6148 4 sep 2008 .DS_Store
-rw-r--r--@ 1 yt staff 708 30 aoû 2008
ANSI_backslash_escape_sequences.txt
-rw-r--r-- 1 yt staff 2008 1 sep 2008 ANSI_colors.txt

etc...

-rwxr-xr-x@ 1 yt staff 805 1 sep 2008 tty_cbreak_ioctl.rb
-rwxr-xr-x 1 yt staff 320 28 aoû 2008 tty_icanon.rb
stderr :
exitstatus : 0
status.stopped? : false
status.exited? : true
status.success? : true
zsh-%

avec la commande :

cmd = "/usr/bin/osascript <<END
do shell script "echo toto "
END"

je me retrouve bien aussi avec :

stdout : toto


par contre, avec cette commande :

cmd = "/usr/bin/osascript <<END
on get_alias_original(a)
tell application 'Finder'
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original('HD:Users:yt:Menu:Desk:Calculette')
do shell script "echo " & o
END"

j'ai l'erreur sur stderr mais que dalle sur stdout pourquoi ?

remarque qu'avec :

cmd = "/usr/bin/osascript <<END
set o to "toto"
do shell script "echo " & o
END"

j'ai bien :

stdout : toto

une question de timing peut-être ?


Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.



oui, c'est bien ça, j'ai testé en en enlevant qq'uns, donc ça signifie
qu'ils ne marchent pas ces "ScriptingAdditions"...
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Avatar
unbewusst.sein
Une Bévue wrote:

tell application 'Finder'



il faut mettre des "" :

tell application "Finder"

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Avatar
Patrick Stadelmann
In article <1jihuqg.z0kr1ys7sttyN%,
(Une Bévue) wrote:

par contre, avec cette commande :

cmd = "/usr/bin/osascript <<END
on get_alias_original(a)
tell application 'Finder'
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original('HD:Users:yt:Menu:Desk:Calculette')
do shell script "echo " & o
END"

j'ai l'erreur sur stderr mais que dalle sur stdout pourquoi ?



Redirige plutôt stderr dans un fichier pour voir s'il n'y a pas d'autres
erreurs. Par exemple, l'emploi de ' simple pour les chaînes ne
fonctionne pas chez moi.

une question de timing peut-être ?



?

oui, c'est bien ça, j'ai testé en en enlevant qq'uns, donc ça signifie
qu'ils ne marchent pas ces "ScriptingAdditions"...



Ca dépend. S'ils sont en 32-bit par exemple, ils peuvent être utilisés
par des applications 32-bit ou lancée en 32-bit.

Patrick
--
Patrick Stadelmann
Avatar
unbewusst.sein
Patrick Stadelmann wrote:

Redirige plutôt stderr dans un fichier pour voir s'il n'y a pas d'autres
erreurs. Par exemple, l'emploi de ' simple pour les chaînes ne
fonctionne pas chez moi.



oui, c'était ça, damned !

je l'ai bu en virant les trucs de ScriptingAdditions, ça me cacher une
autre erreur...
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)