Pourquoi ma commande curl échoue-t-elle lorsqu'elle est exécutée via applescript mais fonctionne-t-elle correctement lorsque je l'exécute directement dans un terminal?
J'essaye d'écrire un applescript pour contrôler un projecteur installé en utilisant son interface Web intégrée. J'ai une commande curl qui envoie un ping à l'URL appropriée et peut contrôler le projecteur selon les besoins à partir de la ligne de commande, lorsque je le construis dans un applescript (requis par mon logiciel de contrôle d'exposition)
Mon applescript ressemble actuellement à ceci:
set theUrl to "http://192.168.0.103/cgi-bin/proj_ctl.cgi?key=shutter_on&lang=e&osd=on"
set theUsername to "dispadmin" -- set this to the username for the projector
set thePassword to "password" --set this to the password for the projector
set myFile to (POSIX path of (path to temporary items)) & "curl_downloaded_file.xml"
set curlScript to "/usr/bin/curl --connect-timeout 1 --anyauth --user" & " " & theUsername & ":" & thePassword & " -L " & theUrl & " -o " & myFile
display dialog "my variable: " & curlScript
do shell script curlScript
La display dialog
ligne est pour le débogage pour montrer à quoi ressemblera la commande curl, lorsque je l'exécute, j'obtiens ce qui suit:
/usr/bin/curl --connect-timeout 1 --anyauth --user dispadmin:password -L http://192.168.0.103/cgi-bin/proj_ctl.cgi?key=shutter_on&lang=e&osd=on -o /private/var/folders/zs/f1hpkd2x281fvzyh4zd5dpcw0000gn/T/TemporaryItems/curl_downloaded_file.xml
Ce qui semble correct. Si j'ajoute des guillemets autour de l'URL, je peux exécuter cette commande dans le terminal sans problème et obtenir l'effet souhaité, mais l'Applescript continuera alors à cracher l'erreur suivante:
error "sh: -o: command not found
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 350 100 350 0 0 38888 0 --:--:-- --:--:-- --:--:-- 38888
100 267 0 267 0 0 5235 0 --:--:-- --:--:-- --:--:-- 5235" number 127
Cela ressemble à curl est en cours d'exécution mais il ne frappe pas le serveur Web du projecteur pour déclencher le contrôleur, error "sh: -o: command not found
cela me fait également penser que la commande n'est pas analysée / transmise correctement.
Qu'est-ce que je fais de mal ici?
Réponses
Tandis que
http://192.168.0.103/cgi-bin/proj_ctl.cgi?key=shutter_on&lang=e&osd=on
fonctionne bien dans un navigateur , ce n'est pas le cas dans un shell .
Pour résoudre le problème, vous devez citer l' URL .
En set curlScript to ...
remplacement theUrl
de soit theUrl's quoted form
ou:quoted form of theUrl