• Bonjour Visiteur. Bienvenue sur les nouveaux forums de MacGeneration. La peinture est encore fraiche, quelques boulons doivent être resserrés, plus d’informations demain !

piloter le terminal par applescript

mistertitan

Membre d’élite
Club MacG
4 Septembre 2003
1 174
132
39
Garches
www.400iso.org
je cherche quelqu'un qui pourrait corriger mon script: je cherche à effacer via le terminal un fichier recalcitrant grace à une variable qui enregistre le chemin d'accès.
mais l'intégration de cette variable ne fonctionne pas ca le terminal interprete
sudo "chemin d'accès" rm
au lieu de
sudo rm "chemin d'accès"

PLEASE HELP

voici la source de mon script:
<font color="red">
tell application "Terminal"
activate
repeat
display dialog "Entrer le chemin d'accès de l'élément à effacer" default answer "" buttons {"Cancel", "OK"} default button 2
set the search_string to the text returned of the result
if the search_string is not "" then exit repeat
end repeat
do script with command "sudo rm “" &amp; the search_string &amp; "” "
end tell
</font>
 

ionah

Membre junior
21 Novembre 2002
78
0
Bonjour,

Il y a 3 problèmes dans ton script :

1- Il faut passer le chemin d'accès au Terminal sous la forme unixienne. C'est ce que fait la commande 'POSIX path of'.

2- La commande des Standard Additions 'do shell script' semble plus fiable que le dictionnaire du Terminal. De plus, elle permet de passer ton mot de passe d'administrateur comme paramètre.

3- Le troisième n'est pas visible dans le code du script : le terminal interprète un espace comme une rupture dans la ligne de commande. Pour bien comprendre ce que j'ai du mal à expliquer : glisses un fichier (dont le nom comprend des espaces) sur une fenêtre du Terminal. Tu verras que chaque espace est précédé du caractère "\" (antislash). Il te faudra donc ajouter les antislashs par script.

--------------------------
set aFile to (choose file) as alias
set aPosix to POSIX path of aFile
do shell script ("sudo rm " &amp; aPosix) password "xxxx" with administrator privileges
--------------------------

Si le nom de ton fichier est exempt d'espaces, ça marche.

Cordialement aussi.
 

Didier Guillion

Membre d’élite
Club MacG
20 Juillet 2001
3 244
164
57
Toulouse
www.myriad-online.com
Bonjour,

Très intéressant ionah.
Une question : tu parle de la substitution des espaces, mais à ce moment la il faudrait en faire autant avec les éventuels caractères accentués ?

J'ai utilisé pas mal "do shell script" et je ne me rappelle pas avoir eut a substituer les espaces.

J'ai encadré toute la commande avec des quotes (') puis le path complet avec des guillemets ("). Comme dans mon exemple au dessus.

Cordialement



 

r e m y

Cas clinique
Club MacG
4 Novembre 2000
41 453
4 222
58
St Germain en Laye - FRANCE
ouh là.... Attention! c'est dangereux la commande rm. Il ne faudrait pas qu'un path mal saisi conduise à effacer tout un dossier voire tout le disque! (je me rappelle d'une mise à jour d'iTunes diffusée par Apple qui avait ce genre de "petit" défaut...)

Personnellement lorsque j'ai un fichier récalcitrant, je préfère taper cette commande manuellement. (Ce n'est pas très long)

Je lance le terminal, je tapes sudo rm puis je glisse le fichier récalcitrant pour que son path se copie tout seul, puis je tapes echo envoi (pour d'abord vérifier que c'est bien seulement le fichier voulu qui va être supprimé).

Ensuite un coup de flèche vers le haut pour recopier la commande, je supprime echo et envoi
 

r e m y

Cas clinique
Club MacG
4 Novembre 2000
41 453
4 222
58
St Germain en Laye - FRANCE
Si tu tiens à ton automatisation via Applescript, peut-être peux tu te contenter d'utiliser la comaande chmod pour modifier les droits d'accès sur le fichier récalcitrant et le supprimer ensuite via le Finder.

Ca me semble moins dangereux car au pire, en cas d'erreur de path tu modifieras les autorisations sur des fichiers qui n'étaient pas concernés, mais via Utilitaire Disque, SOS, réparer les autorisations tu pourras corriger le tir.
 

ionah

Membre junior
21 Novembre 2002
78
0
Bonjour à tous !

Il me semble que la commande 'rm ', lancée tel quel, ne permet pas de supprimer un dossier. Surtout s'il contient quelque chose. Il lui faut ajouter des paramètres. Sinon le Terminal renvoie une erreur du type "L'élément x n'est pas un fichier".
Et puis le 'choose file' permet d'être sûr de ce qu'on supprime. On peut aussi ajouter un 'display dialog' pour avertir/vérifier.

Quant aux espaces, Didier a raison : il suffit d'encadrer le 'POSIX path' par des guillemets. Le code devient donc :

Pour un fichier :
--------------------------
set aFile to (choose file) as alias
set aName to name of (info for aFile)

display dialog "Attention !
Cette commande est irréversible.
Etes-vous sûr(e) de vouloir supprimer définitivement le fichier “" &amp; aName &amp; "” ?" with icon 0 default button 1

set aPosix to (POSIX path of aFile) as text
do shell script ("sudo rm -dr " &amp; "\"" &amp; aPosix &amp; "\"") password "xxxx" with administrator privileges
--------------------------

Pour un dossier :
--------------------------
set aFile to (choose folder) as alias
set aName to name of (info for aFile)

display dialog "Attention !
Cette commande est irréversible.
Etes-vous sûr(e) de vouloir supprimer définitivement le dossier “" &amp; aName &amp; "” ?" with icon 0 default button 1

set aPosix to (POSIX path of aFile) as text
do shell script ("sudo rm -dr " &amp; "\"" &amp; aPosix &amp; "\"") password "xxxx" with administrator privileges
--------------------------

Toujours cordialement.
 

simon

Membre d’élite
Club MacG
18 Juin 2000
3 669
16
Singapore
www.simonganiere.ch
Didier Guillion a dit:
Bonjour,

Très intéressant ionah.
Une question : tu parle de la substitution des espaces, mais à ce moment la il faudrait en faire autant avec les éventuels caractères accentués ?

J'ai utilisé pas mal "do shell script" et je ne me rappelle pas avoir eut a substituer les espaces.

J'ai encadré toute la commande avec des quotes (') puis le path complet avec des guillemets ("). Comme dans mon exemple au dessus.

Cordialement
C'est la même chose directement dans le Terminal (logique vu que la on fait appelle au terminal), si on a un nom de dossier avec un espace u des caractères accentués il faut l'entourrer de "" ou mettre le caractère d'échapement \ devant. Au niveau des script c'est évidement une sécurité de mettre les "" autour d'un chemi d'accès
 

theverglades

Membre confirmé
7 Janvier 2005
112
1
35
Cherbourg
bonjour,

j'aimerais faire un applescript qui permettrait :
- de changer son ip via TOR
- d'aller une page web recupèrer des infos
- d'afficher ces données

Bon le problème c'est que pour l'instant je me suis débrouillé avec des "keystroke" partout mais le problème c'est que c'est lent alors j'aurais bien aimé piloter le terminal afin d'améliorer mon script.

Croyez-vous que ce soit possible?

Merci beaucoup