2017-02-28 8 views
1

Wenn ich den Wert der Variablen Cookie direkt in der Curl-Befehl auf der Befehlszeile verwenden - es funktioniert; aber es funktioniert nicht innerhalb des Skripts. Folgefehler:Curl arbeiten auf der Kommandozeile, aber nicht in Shell-Skript

#!/bin/bash 

cookie=`tail -1000 cat.txt | grep -v "wm-ueug" | grep -v "JRECookie" | grep "JSESSIONID.*_ga=GA" | tail -1 | sed -r 's/.{26}//' | sed 's/.$//'` 

`curl "http://example.com/monitor?method=monitor&refresh=true&count=4&start=1&dateFrom=2017-02-21&dateTo=2017-02-28&runId=&hidden_status=&dojo.preventCache=1488290723103" -H "Host: example.com" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20400202 Firefox/50.0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: en-US,en;q=0.5" --compressed -H "Content-Type: application/x-www-form-urlencoded" -H "X-Requested-With: XMLHttpRequest" -H "Referer: http://example.com/monitor" -H "Cookie: $cookie" -H "Connection: keep-alive"` 

Update: Entfernte zurück Ticks - sehe jetzt keinen Fehler aber keine Ausgabe.

+0

vielleicht sollten Sie verlieren 'Hochkommata' um den' curl' Befehl –

+1

Backticks sind nicht für nur einen Befehl ausgeführt wird; Sie dienen zum * Erfassen * der Ausgabe eines Befehls, der als Wert in einem anderen Ausdruck verwendet werden soll. – chepner

+0

Entfernt die Backticks um curl - Ich bekomme jetzt keinen Fehler aber immer noch keine Ausgabe. Hinweis: Es funktioniert in der Befehlszeile. – Koshur

Antwort

1

Die wichtigste Änderung zu machen, ist curl außerhalb eines Befehls subsitution auszuführen:

# Not `curl ...` 
curl ... 

Sie können jedoch die curl Befehl brechen wollen es besser lesbar und verständlich zu machen.

#!/bin/bash 

cookie=$(tail -1000 cat.txt | 
     grep -v "wm-ueug" | 
     grep -v "JRECookie" | 
     grep "JSESSIONID.*_ga=GA" | 
     tail -1 | sed -r 's/.{26}//' | sed 's/.$//') 

# Parameters can be passed to curl via the -d option, rather 
# than as a query string in the URL. 
url="http://example.com/monitor" 
parameters=(
    -d method=monitor 
    -d refresh=true 
    -d count=4 
    -d start=1 
    -d dateFrom=2017-02-21 
    -d dateTo=2017-02-28 
    -d runId=hidden_status 
    -d dojo.preventCache=1488290723103 
) 

headers=(
    -H "Host: example.com" 
    -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20400202 Firefox/50.0" 
    -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
    -H "Accept-Language: en-US,en;q=0.5" 
    -H "Content-Type: application/x-www-form-urlencoded" 
    -H "X-Requested-With: XMLHttpRequest" 
    -H "Referer: http://example.com/monitor" 
    -H "Cookie: $cookie" 
    -H "Connection: keep-alive" 
) 
curl --compressed "${parameters[@]}" "${headers[@]}" "$url" 
+0

Ich sehe jetzt keinen Fehler, aber keine Ausgabe .. – Koshur

+1

@Koshur add '- v Flag zum Curl-Befehl, um zu sehen, was vor sich geht. Eine leere Antwort ist zu erwarten, wenn der Server mit einer Umleitung antwortet und Sie nicht "curl" gebeten haben, ihnen zu folgen, aber das ist nur eine Möglichkeit. – Aaron

Verwandte Themen