2017-06-30 3 views
1

Ich habe ein einfaches Shell-Skript, das wie folgt ist.wget funktioniert im Terminal aber nicht von Shell-Skript

Wenn ich es mit sh-Befehl ausführen, erhalte ich den folgenden Fehler.

--2017-06-29 20:35:41-- http://nlp.stanford.edu/data/glove.840B.300d.zip%0D 
Resolving nlp.stanford.edu (nlp.stanford.edu)... 171.64.67.140 
Connecting to nlp.stanford.edu (nlp.stanford.edu)|171.64.67.140|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: https://nlp.stanford.edu/data/glove.840B.300d.zip%0d [following] 
--2017-06-29 20:35:41-- https://nlp.stanford.edu/data/glove.840B.300d.zip%0d 
Connecting to nlp.stanford.edu (nlp.stanford.edu)|171.64.67.140|:443... connected. 
HTTP request sent, awaiting response... 404 Not Found 
2017-06-29 20:35:41 ERROR 404: Not Found. 

Aber wenn ich den gleichen wget Befehl (geschrieben in dem Shell-Skript) von Terminal laufen, es funktioniert gut! Was ist das Problem in meinem Shell-Skript? Was ich vermisse?

Antwort

2

Beachten Sie die% 0d am Ende. Es scheint so, als hätten Sie irgendwo in einer Linux-Umgebung DOS/Windows-Zeilenendungen benutzt. Das% 0d ist ein "Carriage Return" -Zeichen, da in Windows CR LF (Carriage Return Line Feed) für Zeilenumbrüche verwendet wird. Unix erwartet nur LF und enthält das zusätzliche Zeichen in der Befehlszeile.

Siehe Difference between CR LF, LF and CR line break types?

+0

oh, mein Schlechter, ich habe das '% 0D' nicht bemerkt. Vielen Dank. –

0

Sie haben Ihr Skript bearbeitet etwas mit der DOS-Zeilenenden verwendet. So wget ist eine unechte Wagenrücklauf (hex 0D) am Ende der Zeile.

Ersetzen Sie die DOS-Zeilenenden (CR-LF) mit Unix-Einsen (LF) und alles wird gut.

Verwandte Themen