8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Bash 中,循环在第一行之后停止读取

Сергей Солдатов 1月前

49 0

我有以下 shell 脚本。目的是循环遍历目标文件(其路径是脚本的输入参数)的每一行并针对每一行执行操作。现在,它似乎只能工作...

我有以下 shell 脚本。目的是循环遍历目标文件(其路径是脚本的输入参数)的每一行并对每一行执行操作。现在,它似乎只对目标文件的第一行执行操作,并在处理完该行后停止。我的脚本有什么问题吗?

#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets 

FILENAME=$1
count=0

echo "proceed with $FILENAME"

while read LINE; do
   let count++
   echo "$count $LINE"
   sh ./do_work.sh $LINE
done < $FILENAME

echo "\ntotal $count targets"

在 中 do_work.sh ,我运行了几个 ssh 命令。

帖子版权声明 1、本帖标题:在 Bash 中,循环在第一行之后停止读取
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Сергей Солдатов在本站《bash》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 问题是 do_work.sh 运行 ssh 命令并默认 ssh 从 stdin(即您的输入文件)读取。因此,您只能看到处理的第一行,因为该命令使用了文件的其余部分并且您的 while 循环终止。

    这不仅适用于 ssh ,也适用于任何读取 stdin 的命令,包括 mplayer , ffmpeg , HandBrakeCLI , httpie , brew install ,等等。

    为了防止这种情况,请将 -n 选项传递给 ssh 命令,使其从 /dev/null stdin 而不是 stdin 读取。其他命令有类似的标志,或者您可以普遍使用 < /dev/null .

返回
作者最近主题: