2017-01-19 5 views
0

I次のスクリプトがありますscans.ioカールからの結果を動的に成長しているリストをCURLをループし、結果

  1. ループ:

    #!/bin/bash 
    for line in $('curl -s https://scans.io/data/rapid7/sonar.http/20141209-http.gz | zcat | head -n 1000 | dap json + select vhost + lines'); 
    do 
        echo "$line\n" 
    done 
    

    たため、私は次のことを達成しようとしています

  2. 出力私はその後、保存するためにPHPに渡すことを提案ラインおよびプロセス

しかし、I syntax error near unexpected token $ '\ r''`を取得していますが、私が調整する必要があることを知るBASHの専門家ではありません。

+0

直接PHPにdap' 'の出力を単一引用符 – ceving

+0

を削除するには、本体だけでラインをエコーよりも多くを行っている場合を除き、あなたがすべてでループを必要としない、ただのパイプ。 – chepner

答えて

2

Process-Substitutionwhileループwhy using for-loop for command output parsing is badを参照してください。 IFSread-rフラグの設定を解除しても、バックスラッシュはすべての文字をエスケープし、文字列をそのまま「現状」として扱うことはできません。

#!/bin/bash 

while IFS= read -r line 
do 
    echo "$line\n" 
done < <(curl -s https://scans.io/data/rapid7/sonar.http/20141209-http.gz | zcat | head -n 1000 | dap json + select vhost + lines) 
+0

あなたの答えをありがとう。 http://stackoverflow.com/questions/2711001で提案されているように、コマンドをパイプすることでもできることが分かりました。 – Antony

+0

@Antony:_常に、サードパーティのツールに依存するのではなく、ネイティブシェルから利用可能なツール/提案を使用します。移植性の理由。私が提案したアプローチはより信頼性があります。 – Inian

+0

配管は第三者要素ですか? – Antony