Variablen von AppleScript an Shell Script weitergeben?

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.175
Punkte Reaktionen
4
Hallo zusammen

Ich bin meinem Projekt schon ein Stückchen näher, stehe aber noch vor einem Problem.
Ich habe folgendes Script, welches über eine URL (Custom Url scheme) aufgerufen wird. Funktioniert auch soweit gut. Arguments werden auch übermittelt.

Nun öffnet der zweite Teil des Scripts ein Shell-Script im Terminal. Macht es bis jetzt auch. Nun aber die Frage:

Wie kann ich die Variable "signature" an das Shell-Script weitergeben und da auf den Wert überprüfen?

Danke und liebe Grüsse

Léo


Code:
on open location this_URL
    -- When the link is clicked in thewebpage, this handler will be passed
    -- the URL that triggered the action, similar to:
    --> yourURLProtocol://yourBundleIdentifier?key=value&key=value
    
    
    -- EXTRACT ARGUMENTS
    set x to the offset of "?" in this_URL
    set the argument_string to text from (x + 1) to -1 of this_URL
    set AppleScript's text item delimiters to "&"
    set these_arguments to every text item of the argument_string
    set AppleScript's text item delimiters to ""
    

    repeat with i from 1 to the count of these_arguments
        set this_pair to item i of these_arguments
        set AppleScript's text item delimiters to "="
        copy every text item of this_pair to {this_key, this_value}
        set AppleScript's text item delimiters to ""
        if this_key is "signature" then
            set signature to this_value
        end if
    end repeat
end open location

tell application "Finder" to get folder of (path to me) as Unicode text
set workingDir to POSIX path of result
tell application "Terminal"
    do script "sh " & "'" & workingDir & "print_queue.sh" & "'"
    
end tell

end run
 

lisanet

Aktives Mitglied
Dabei seit
05.12.2006
Beiträge
5.992
Punkte Reaktionen
6.398
kannst du nicht den Aufreuf des Shell-Scripts in den handler intergrieren und dann einfach die Variable als Parameter in den Script-Aufruf setzen?

Und warum machst du überhaupt den Riesenumweg über Terminal und dann noch einen zusätzlichen Aufruf von sh?

Wenn du workingdir gleich in quoted from zurück geben lässt, reicht ein 'do shell script '"' & "workingDir" & "print_queue.sh " & signature & "'" (ohne das jetzt explizit zu testen)
 

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.175
Punkte Reaktionen
4
Hallo und danke für deine Antwort.

Wenn ich die Variable so anhänge, findet es die Datei nicht mehr.

sh: /Users/leo/Desktop/Projekte/HomeworkRFID/PRINT_SERVER/Print_from_URL/test.sh test1234: No such file or directory

Was mach ich falsch...??
 

lisanet

Aktives Mitglied
Dabei seit
05.12.2006
Beiträge
5.992
Punkte Reaktionen
6.398
Dann sind Quotes fasch gesetzt und das Leerzeichen zwischen Befehl und Parameter wird nicht als Trenner erkannt.
Ich habe nur von dir abgeschrieben aber ich bin der Ansicht, dass das erste und letze Single Quote falsch sind
 

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.175
Punkte Reaktionen
4
Hm das ist so. Wenn ich den Pfad direkt nehme, dann klappts.

Habe alle möglichen Quote Kombinationen versucht... Nichts klappt. Hat jemand eine Idee, wie ich das mit meinem "workingDir" machen kann ohne direkten Dateipfad?
 

biro21

Aktives Mitglied
Dabei seit
19.01.2021
Beiträge
1.609
Punkte Reaktionen
915
Ich denke da gehört ein quoted form of... rein. So in etwa
Code:
'do shell script '"' & "workingDir" & "print_queue.sh " & quoted form of signature & "'"
 

lisanet

Aktives Mitglied
Dabei seit
05.12.2006
Beiträge
5.992
Punkte Reaktionen
6.398
Du musst den Pfad doch nur dann quoten, wenn er Leerzeichen enthält. Ich bin auf dem iPad unterwegs, aber sowas wie

Code:
set workingDir to quoted form of (POSIX path of result)

sollte reichen, dass Leerzeichen in workingDir mit backslash escaped werden.

Dann reicht auch
Code:
do shell script workingDir & "print_queue.sh " & signature

Hier muss das Leerzeichen mit in den double quotes sein.
 
Oben Unten