1

前もってお詫び申し上げます。これは私の初めての投稿なので、十分に具体的でない場合、質問が既に回答されていて十分に調べていない場合、および何らかの不適切な書式を使用している場合は申し訳ありません.

とはいえ、ここに私の問題があります.bashで、数十のURLをリストするファイルを読み取るスクリプトを作成しようとしています。各行を読み取ったら、一連のアクションを実行する必要があります。最初のアクションは、lynx を使用して Web サイトに移動することです。ただし、実際には、最初の行で一度完全に実行されます。Lynx が進み、ダウンロードが機能し、その後、そのファイルの名前変更と整理も行われます。しかし、その後、他のすべての行をスキップして、ファイル全体を終了したかのように動作します。

コードの他のすべての部分を削除してから、lynx を削除するだけで、問題の原因が lynx であるかどうかをテストしました。Lynx がなくても動作しますが、もちろん、出力の残りの部分を使用するには lynx が必要です。コードを投稿してみましょう:

!#/bin/bash

while read line; do
echo $line
  lynx -accept_all_cookies  $line
echo "lynx done"
  od -N 2 -h *.zip | grep "4b50"
echo "od done, if 1 starting..."
    if [[ $? -eq 0 ]]
    then ls *.*>>logs/zips.log
    else
    od -N 2 -h *.exe | grep "5a4d"
echo "if 2 starting..."     
      if [[ $? -eq 0 ]]
      then ls *.*>>logs/exes.log
      else
      od -N 2 -h *.exe | grep "5a4d, 4b50"
echo "if 3 starting..."
        if [[ $? -eq 1 ]]
        then
        ls *.*>>logs/failed.log
        fi
echo "if 3 done"
      fi
echo "if 2 done"
    fi
echo "if 1 done..."
  FILE=`(ls -tr *.* | head -1)`
  NOW=$(date +"%m_%d_%Y")
echo "vars set"
  mv $FILE "criticalfreepri/${FILE%%.*}(ZCH,$NOW).${FILE#*.}" -u
echo "file moved"
  rm *.zip *.exe
echo "file removed"
done < "lynx"

$SHELL

念のために言っておきますが、私は「lynx」というファイルを持っています。このファイルには、それぞれリターンで区切られた URL が含まれています。また、これらすべての「エコー」を使用して独自のデバッグを行いましたが、エコーの有無にかかわらず試しました。スクリプトを実行すると、エコーがすべて表示されます...

どんな助けでも大歓迎です、そして本当にありがとう!この投稿のルールに違反していないことを願っています!

PS: Linux Mint で「ターミナル」プログラムを使用しています。その情報のいずれかが関連している場合、私は Gedit で bash を使用してスクリプトを作成しています。ありがとう!

編集: 実際には、エコー テストは 3 行すべてに対して繰り返されます。では、lynx は同じループで再び開始できないように見えるでしょうか?

要求に応じて、スクリプトの簡略化されたバージョンを次に示します。

!#/bin/bash

while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url" 
read "lynx"

$SHELL

「url」ファイルが移動するサイトを変更したことに注意してください。

`www.google.com

www.majorgeeks.com

http://www.sophos.com/en-us/products/free-tools/virus-removal-tool.aspx `

4

3 に答える 3

1

lynx コマンドを別の URL リンクに置き換えてループで実行するという要件を満たす方法を見つけました。

使用する

echo `lynx $line` 

(一重引用符 (') で lynx の $line をエコーし​​ます) の代わりにlynx $line. 以下を参照してください。

あなたのコード

!#/bin/bash

while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url" 
read "lynx"

$SHELL

下で試着

!#/bin/bash
while read -r line; do
echo $line
echo `lynx $line`
echo "lynx done"
done < "ref/url" 
于 2013-12-11T14:43:40.037 に答える
0

私はずっと前にこの質問に答える必要がありました。プログラムが動作するようになりました。現在は Github にあります。

とにかく、ループを関数内にラップするだけで済みました。このようなもの:

progdownload () {
  printlog "attmpting download from ${URL}"
  if echo "${URL}" | grep -q "http://www.majorgeeks.com/" ; then
lynx -cmd_script="${WORKINGDIR}/support/mgcmd.txt" --accept-all-cookies ${URL}
  else wget ${URL}
  fi
  }
URL="something.com"
progdownload
于 2016-01-12T04:19:03.563 に答える