2017-06-30 14 views
1

私は以下のような単純なシェルスクリプトを持っています。wgetは端末で動作していますが、シェルスクリプトからは動作しません

#!/usr/bin/env bash 
wget -O glove.840B.300d.zip http://nlp.stanford.edu/data/glove.840B.300d.zip 

shコマンドを使用して実行すると、次のエラーが発生します。

--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. 

しかし、私は端末から(シェルスクリプトで書かれた)同じwgetコマンドを実行すると、それが正常に動作します!私のシェルスクリプトの問題は何ですか?私は何が欠けているのですか?

答えて

2

最後に%0dに注意してください。途中で、Linux環境でDOS/Windowsの行末を使用したようです。その%0dは改行にWindows CR LF(改行改行)が使用されているので、 "%c"は "改行"文字です。 UnixはLFだけを想定しており、余分な文字がコマンドラインに含まれています。

あなたはDOSの行末を使用するものを使用してスクリプトを編集したDifference between CR LF, LF and CR line break types?

+0

ああ、私の悪い、私は '%0D'に気付かなかった。ありがとう。 –

0

を参照してください。したがって、wgetは、ラインの最後に偽のキャリッジリターン(16進数0D)が表示されています。

DOSの行末(CR-LF)をUNIXのもの(LF)に置き換えると、すべてがうまくいくでしょう。

関連する問題