trumpbone
Goto Top

Curl funktoniert unter cygwin bash nicht korrekt

Ich versuche aus einem bash Skript, welches ich unter Windows innerhalb eines cygwin Terminals aufrufe, eine "curl" Kommando abzusetzen. Erstaunlicherweise geht das geleiche Kommando unter PowerShell oder CMD, aber nicht , wenn ich es aus cygwin aufrufe.

Auch Versuche:
"echo curl -o out.txt http://<URL>" | powershell oder
powershell -command "curl -o out.txt http://<URL>" führen zum gleichen Ergebnis. Es werden nur 641 Byte von erwarteten 1538 geholt.

Beispiel:
Cygwin Bash Terminal:

$ echo "curl.exe  -o out.txt http://192.168.178.38:9100/webbrowse/O3$536871012" | powershell  
Windows PowerShell
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Lernen Sie das neue plattformübergreifende PowerShell kennen – https://aka.ms/pscore6

PS C:\Users\sablewski\tools> curl.exe  -o out.txt http://192.168.178.38:9100/webbrowse/O336871012
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   641  100   641    0     0   5566      0 --:--:-- --:--:-- --:--:--  5573
PS C:\Users\sablewski\tools>

PowerShell direkt:
PS C:\Users\sablewski\tools> curl.exe  -o out.txt http://192.168.178.38:9100/webbrowse/O3$536871012
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1538  100  1538    0     0  97083      0 --:--:-- --:--:-- --:--:--  100k* * 

Interessanterweise wird nicht hinten abgeschnitten sondern ein Block zwischen <body> und </body> unterdrückt/herausgefiltert, der ausschließlich "Zeilen"/bzw. "Abschnitte" enthält , die mit <div class= ..."
begonnen werden.

Hat dafür jemand eine Erklärung ? Diese fände ich hoch interessant !

Die Alternative mit Powershell selbst die Daten zu holen funktioniert tadellos.

Content-Key: 51477027972

Url: https://administrator.de/contentid/51477027972

Printed on: February 21, 2024 at 06:02 o'clock

Member: kpunkt
kpunkt Feb 12, 2024 updated at 12:28:51 (UTC)
Goto Top
Würde ich jetzt mal auf Anführungszeichen tippen.
Siehe das $

Ach...ist ja genau anders rum....Powershell machts
Vergiss das also
Member: abramakabra
abramakabra Feb 12, 2024 updated at 12:46:08 (UTC)
Goto Top
Jepp das Dollarzeichen leitet sowohl in Bash und Powershell eine Variable ein, steht diese nicht in Hochkommas wird sie expandiert, auch innerhalb von normalen Anführungszeichen, URL in Hochkommas setzen dann wird auch nichts in der URL expandiert
echo 'curl.exe  -o out.txt "http://192.168.178.38:9100/webbrowse/O3`$536871012"' | powershell  
oder eben das Dollarzeichen escapen wenn normale Anführungszeichen benutzt werden
echo "curl.exe  -o out.txt \"http://192.168.178.38:9100/webbrowse/O3`\$536871012\"" | powershell  

Shell expansion

screenshot
Member: trumpbone
Solution trumpbone Feb 12, 2024 at 12:47:56 (UTC)
Goto Top
Genau richtig getippt. In der URL ist ein "$5" zu finden , den die Bash versucht aufzulösen. Da es die Variable $5 nicht gibt, ist sie leer und es wird versucht, die Seite http://192.168.178.38:9100/webbrowse/O3;;36871012

statt http://192.168.178.38:9100/webbrowse/O3$536871012 zu holen.
Die gibt es aber nicht und der Server liefert http://192.168.178.38:9100/webbrowse/O3 aus.

Also einfacher erklärt als gedacht. Es wurden deshalb nur unterschiedliche URLs gezogen.

Ähnlicher Effekt bei reinem Gebrauch von Powershell. Da muß der $ auch maskiert werden, wenn das Kommando in der auszuführende Datei.

Maskierung mit hilft face-smile Dann wird es sicherlich auch mit curl klappen .
Member: abramakabra
abramakabra Feb 12, 2024 updated at 12:55:13 (UTC)
Goto Top
p.s In. Powershell brauchst du nicht unbedingt curl das hat auch schon passende Commands
Invoke-WebRequest 'http://192.168.178.38:9100/webbrowse/O3$536871012' -OutFile "D:\out.txt"  
Invoke-WebRequest