# piloter le terminal par applescript



## mistertitan (8 Septembre 2003)

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>


----------



## Didier Guillion (8 Septembre 2003)

Bonjour,

Pas vraiment eut le temps d'essayer profondement, mais peut etre :


set cmd to "'sudo rm \"" &amp; the search_string &amp; "\"'" &amp; (ASCII character 10)
do shell script cmd

Cordialement


----------



## ionah (9 Septembre 2003)

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 (9 Septembre 2003)

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 (9 Septembre 2003)

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 (9 Septembre 2003)

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 (9 Septembre 2003)

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 (10 Septembre 2003)

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 ?
> ...



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 (21 Août 2007)

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


----------

