Mengapa perintah curl saya gagal saat dijalankan melalui applescript tetapi berfungsi dengan baik saat saya menjalankan langsung di terminal?

Aug 19 2020

Saya mencoba menulis applescript untuk mengontrol proyektor yang dipasang menggunakan antarmuka web bawaan. Saya memiliki perintah curl yang mem-ping URL yang sesuai dan dapat mengontrol proyektor sesuai kebutuhan dari baris perintah, saat saya membuatnya menjadi applescript (diperlukan oleh perangkat lunak kontrol acara saya)

Applescript saya saat ini terlihat seperti ini:

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

The display dialogline untuk debugging untuk menunjukkan apa perintah curl akan terlihat seperti, ketika saya menjalankan ini saya mendapatkan berikut:

/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

Yang sepertinya benar. Jika saya menambahkan tanda kutip di sekitar URL, saya dapat menjalankan perintah ini di terminal tanpa masalah dan mendapatkan efek yang diinginkan, namun Applescript kemudian akan terus mengeluarkan kesalahan berikut:

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

Ini terlihat seperti curl sedang berjalan tetapi tidak mengenai server web proyektor untuk memicu pengontrol, juga error "sh: -o: command not foundmembuat saya berpikir bahwa perintah tidak diurai / diteruskan dengan benar.

Apa yang saya lakukan salah di sini?

Jawaban

2 user3439894 Aug 19 2020 at 22:00

Sementara

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

berfungsi dengan baik di browser , tidak di shell .

Untuk mengatasi masalah tersebut Anda perlu mengutip URL .

Dalam set curlScript to ...perubahan theUrlmenjadi theUrl's quoted formatau:quoted form of theUrl