Bashスクリプトループは、内部から再帰的に自分自身を呼び出すと、途中で終了します

Lランシング

ウィキペディアのURLを引数(wiki_txt_script.sh)として受け取り、wgetを使用してページからテキストを受け取るbashスクリプトがあります。-rオプションを指定して呼び出すと、テキスト内からリンクされているページのテキストを使用するかどうかをユーザーに確認し、選択したURLを1行に1つずつ一時ファイルに入れます。これらのページからもテキストを取得するために、各URLでスクリプトを再帰的に呼び出すループを作成しました。

while read line; do
  echo $line
  wiki_txt_script.sh -w $line
  echo finished a recursive call
done <temp_links.txt

ただし、これは1回だけループし、temp_links.txtの最初のURLからテキストを正常に取得しているように見えます(再帰呼び出し後もループ内でechoコマンドを実行しています)が、ループは終了し、temp_linksの他の行は呼び出されません。 。txt。再帰呼び出しをループから削除すると、各行をループし、期待どおりに内容をエコーし​​ます。再帰呼び出しが存在するときにループが早期に終了する原因は何ですか?

編集:チャールズの答えは私の問題を解決しました。ただし、dev / nullでスクリプトを使用した後、端末への出力の各行は、端末への出力の最後の行の終わりから始まりました。スクリプトが終了し、次のように表示されると、これは他のコマンドでも続行されます。

奇妙なコマンドラインの外観

新しいセッションを開始すると、これは簡単になくなります。なぜこれが起こったのかについて何か考えはありますか?

チャールズ・ダフィー

これは再帰とは何の関係もありません。コードが繰り返し発生する場合は、最初の行がtemp_links.txt何度も書き込まれる無限ループが発生します


while read行が存在するときにループが早期に終了する明らかな理由は、その行がすべてのstdinを消費し、次のread呼び出しのために何も残さないことです

これを回避するには、この障害の原因となるコマンドのstdinをリダイレクトします。

wiki_txt_script.sh -w "$line" </dev/null

...または読み取りに非stdinファイル記述子を使用します。

while read line <&3; do
  ...
done 3< temp_links.sh

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

自分自身を(再帰的に)呼び出すメンバーメソッドが無限ループに入らないのはなぜですか?

分類Dev

bash関数がローカル変数を使用せずに自分自身を再帰的に呼び出すことができるのはなぜですか?

分類Dev

異なる引数で自分自身を呼び出すbashスクリプト

分類Dev

docker関数はsudoを使用するときに自分自身を再帰的に呼び出さないのですか?

分類Dev

再帰的なPython関数では、自分自身を呼び出すコード行の後に続くコード行にどのように到達しますか

分類Dev

すべての再帰呼び出しの前に、最終的な結果を返す再帰関数は、コールスタックからポップされています

分類Dev

再帰的に自分自身を呼び出す関数で「return」ステートメントを省略する

分類Dev

自分自身を呼び出すスクリプトに変数を渡す

分類Dev

を使用してスクリプトを呼び出さずに、スクリプトからディレクトリを変更する方法。./script、またはを呼び出すときにスクリプトを終了します。./script.sh

分類Dev

自分自身を新しいファイルにエコーするbashスクリプトを取得するにはどうすればよいですか?

分類Dev

関数呼び出しを変数に割り当てるときにbashスクリプトを終了します

分類Dev

クラス内で自分自身を呼び出すことは何をしますか?

分類Dev

forループから抜け出そうとしますが、ループに戻り、再帰呼び出しを実行し続けます

分類Dev

さまざまなパラメーターを使用してbashスクリプトを再帰的に呼び出す

分類Dev

bashからRスクリプトを呼び出すときの終了コード

分類Dev

bashスクリプトからawkスクリプトを呼び出すときにエラーが発生しました

分類Dev

ディレクトリを再帰的に見つけて、bashスクリプト内のpythonスクリプト呼び出しに解析するにはどうすればよいですか?

分類Dev

再帰ループの呼び出しスタックを出力します

分類Dev

このbashスクリプトが終了時に呼び出しプロセスを終了するのはなぜですか?

分類Dev

bashシェルスクリプトからサービスURLを並行して呼び出す方法は?

分類Dev

呼び出されたときのメソッドは、仮想的に自分自身を再帰的に呼び出します

分類Dev

JavaコードからAntまたはNSISスクリプトを呼び出すことは可能ですか?

分類Dev

自分のスクリプトとは異なるNode.jsスクリプトを呼び出すにはどうすればよいですか?

分類Dev

自分自身を呼び出すPHPコンストラクター-繰り返しではありません

分類Dev

ソリューションエクスプローラーで参照として宣言せずに、別のプロジェクトからDLLメソッドを呼び出すまたは呼び出すにはどうすればよいですか?

分類Dev

CMDまたはバッチファイルから呼び出すときに、PowerShellスクリプトで呼び出し元のディレクトリを取得することはできますか?

分類Dev

ajaxからPHPスクリプトを呼び出すときに内部サーバーエラーが発生しました

分類Dev

別のスクリプトまたはシェルからの呼び出しに応じて、スクリプト内のコードを区別します

分類Dev

自分自身を呼び出すことによるSubMain()の無限ループ?

Related 関連記事

  1. 1

    自分自身を(再帰的に)呼び出すメンバーメソッドが無限ループに入らないのはなぜですか?

  2. 2

    bash関数がローカル変数を使用せずに自分自身を再帰的に呼び出すことができるのはなぜですか?

  3. 3

    異なる引数で自分自身を呼び出すbashスクリプト

  4. 4

    docker関数はsudoを使用するときに自分自身を再帰的に呼び出さないのですか?

  5. 5

    再帰的なPython関数では、自分自身を呼び出すコード行の後に続くコード行にどのように到達しますか

  6. 6

    すべての再帰呼び出しの前に、最終的な結果を返す再帰関数は、コールスタックからポップされています

  7. 7

    再帰的に自分自身を呼び出す関数で「return」ステートメントを省略する

  8. 8

    自分自身を呼び出すスクリプトに変数を渡す

  9. 9

    を使用してスクリプトを呼び出さずに、スクリプトからディレクトリを変更する方法。./script、またはを呼び出すときにスクリプトを終了します。./script.sh

  10. 10

    自分自身を新しいファイルにエコーするbashスクリプトを取得するにはどうすればよいですか?

  11. 11

    関数呼び出しを変数に割り当てるときにbashスクリプトを終了します

  12. 12

    クラス内で自分自身を呼び出すことは何をしますか?

  13. 13

    forループから抜け出そうとしますが、ループに戻り、再帰呼び出しを実行し続けます

  14. 14

    さまざまなパラメーターを使用してbashスクリプトを再帰的に呼び出す

  15. 15

    bashからRスクリプトを呼び出すときの終了コード

  16. 16

    bashスクリプトからawkスクリプトを呼び出すときにエラーが発生しました

  17. 17

    ディレクトリを再帰的に見つけて、bashスクリプト内のpythonスクリプト呼び出しに解析するにはどうすればよいですか?

  18. 18

    再帰ループの呼び出しスタックを出力します

  19. 19

    このbashスクリプトが終了時に呼び出しプロセスを終了するのはなぜですか?

  20. 20

    bashシェルスクリプトからサービスURLを並行して呼び出す方法は?

  21. 21

    呼び出されたときのメソッドは、仮想的に自分自身を再帰的に呼び出します

  22. 22

    JavaコードからAntまたはNSISスクリプトを呼び出すことは可能ですか?

  23. 23

    自分のスクリプトとは異なるNode.jsスクリプトを呼び出すにはどうすればよいですか?

  24. 24

    自分自身を呼び出すPHPコンストラクター-繰り返しではありません

  25. 25

    ソリューションエクスプローラーで参照として宣言せずに、別のプロジェクトからDLLメソッドを呼び出すまたは呼び出すにはどうすればよいですか?

  26. 26

    CMDまたはバッチファイルから呼び出すときに、PowerShellスクリプトで呼び出し元のディレクトリを取得することはできますか?

  27. 27

    ajaxからPHPスクリプトを呼び出すときに内部サーバーエラーが発生しました

  28. 28

    別のスクリプトまたはシェルからの呼び出しに応じて、スクリプト内のコードを区別します

  29. 29

    自分自身を呼び出すことによるSubMain()の無限ループ?

ホットタグ

アーカイブ