0 votes

erreur avec l'appel applescript "do shell script" de l'automate (fichier non trouvé) alors que la ligne de commande avec la même commande fonctionne

J'ai une application automator simple qui exécute un simple script. Il utilise ssh pour ouvrir un fichier sur la machine locale, MachineA avec une application sur la machine distante, MachineB et enregistre l'appel ssh.

on run {input, parameters}
    repeat with fn in input
        set fn to POSIX path of fn
        set fn to "/Volumes/MachineA" & fn
        set fn to "\"/usr/bin/open -a /Applications/Preview.app " & fn & "\""
        set cmd to "ssh -x MachineB.local " & quoted form of fn
        do shell script "echo " & cmd & " >> ~/cmd.log"
        do shell script cmd
    end repeat
end run

La sortie du journal est :

ssh -x MachineB.local "/usr/bin/open -a /Applications/Preview.app /Volumes/MachineA/Users/<USER>/Documents/<FOLDER>/<FILE>.pdf"

Lorsque j'utilise l'application pour ouvrir un fichier (glisser-déposer), une erreur se produit.

error message

Toutefois, si je copie la sortie du fichier journal dans la ligne de commande, le fichier est ouvert sur la machine distante. Pourquoi cette différence ?

0voto

Gordon Davisson Points 30215

Je ne l'ai pas testé, mais il semble que vous ayez trop de niveaux de citations. Vous devez placer manuellement des guillemets autour de la commande à exécuter via ssh (dans le champ set fn to "\"/usr/bin/open ... & "\"" ligne), et puis utiliser quoted form of fn qui ajoute un autre niveau des devis. Cela semble bien quand vous echo mais c'est parce que l'interpréteur de commandes analyse et supprime un niveau de guillemets avant de le transmettre à l'interpréteur de commandes. echo commandement.

De même, si le chemin d'accès au fichier contient des espaces ou d'autres caractères bizarres, ceux-ci doivent être cités (mais seulement cette partie du chemin, pas la commande entière). Essayez plutôt ceci :

on run {input, parameters}
    repeat with fn in input
        set fn to POSIX path of fn
        set fn to "/Volumes/MachineA" & fn
        set fn to "/usr/bin/open -a /Applications/Preview.app " & quoted form of fn
        set cmd to "ssh -x MachineB.local " & quoted form of fn
        do shell script "echo " & quoted form of cmd & " >> ~/cmd.log"
        do shell script cmd
    end repeat
end run

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X