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?

Aug 19 2020

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 dialogligne 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 foundcela 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

2 user3439894 Aug 19 2020 at 22:00

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 theUrlde soit theUrl's quoted formou:quoted form of theUrl