Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

piloter le terminal par applescript

Discussion dans 'Développement Mac' créé par mistertitan, 8 Septembre 2003.

  1. mistertitan

    mistertitan Membre d’élite
    Club MacG

    Inscrit:
    4 Septembre 2003
    Messages:
    1 174
    J'aime reçus:
    132
    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>
     
  2. Didier Guillion

    Didier Guillion Membre d’élite
    Club MacG

    Inscrit:
    20 Juillet 2001
    Messages:
    3 244
    J'aime reçus:
    164
    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
     
  3. ionah

    ionah Membre junior

    Inscrit:
    21 Novembre 2002
    Messages:
    78
    J'aime reçus:
    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.
     
  4. Didier Guillion

    Didier Guillion Membre d’élite
    Club MacG

    Inscrit:
    20 Juillet 2001
    Messages:
    3 244
    J'aime reçus:
    164
    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



     
  5. r e m y

    r e m y Cas clinique
    Club MacG

    Inscrit:
    4 Novembre 2000
    Messages:
    41 453
    J'aime reçus:
    4 224
    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
     
  6. r e m y

    r e m y Cas clinique
    Club MacG

    Inscrit:
    4 Novembre 2000
    Messages:
    41 453
    J'aime reçus:
    4 224
    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.
     
  7. ionah

    ionah Membre junior

    Inscrit:
    21 Novembre 2002
    Messages:
    78
    J'aime reçus:
    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.
     
  8. simon

    simon Membre d’élite
    Club MacG

    Inscrit:
    18 Juin 2000
    Messages:
    3 669
    J'aime reçus:
    16
    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 [​IMG]
     
  9. theverglades

    theverglades Membre confirmé

    Inscrit:
    7 Janvier 2005
    Messages:
    112
    J'aime reçus:
    1
    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
     
Chargement...