Perché il mio comando curl fallisce quando viene eseguito tramite AppleScript ma funziona bene quando eseguo direttamente in un terminale?

Aug 19 2020

Sto cercando di scrivere uno script di mele per controllare un proiettore installato utilizzando la sua interfaccia web incorporata. Ho un comando curl che esegue il ping dell'URL appropriato e posso controllare il proiettore secondo necessità dalla riga di comando, quando lo creo in uno script di mele (richiesto dal software di controllo dello spettacolo)

Il mio script di mele attualmente assomiglia a questo:

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 dialogriga serve per il debug per mostrare come sarà il comando curl, quando lo eseguo ottengo quanto segue:

/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

Che sembra corretto. Se aggiungo virgolette attorno all'URL, posso eseguire questo comando nel terminale senza problemi e ottenere l'effetto desiderato, tuttavia Applescript continuerà a sputare il seguente errore:

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

Sembra che curl sia in esecuzione ma non colpisce il server web del proiettore per attivare il controller, inoltre error "sh: -o: command not foundmi fa pensare che il comando non sia stato analizzato / passato correttamente.

Cosa sto facendo di sbagliato qui?

Risposte

2 user3439894 Aug 19 2020 at 22:00

Mentre

http://192.168.0.103/cgi-bin/proj_ctl.cgi?key=shutter_on&lang=e&osd=on

funziona bene in un browser , non in una shell .

Per risolvere il problema è necessario citare l' URL .

In set curlScript to ...cambio theUrldi uno theUrl's quoted formo di:quoted form of theUrl