bash - 在第一行之后停止读取行循环时的Shell脚本

标签 bash shell ssh while-loop

我有以下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命令。

最佳答案

问题是do_work.sh运行ssh命令,默认情况下ssh从输入文件stdin中读取。结果,您仅看到处理的第一行,因为ssh占用了文件的其余部分,而while循环终止。

为防止这种情况,请将-n选项传递给ssh命令,以使其从/dev/null而不是stdin中读取。

关于bash - 在第一行之后停止读取行循环时的Shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55254873/

相关文章:

ruby - 使用 ruby​​ 的 Neovim 作业控制示例

macos - 检查两个文件是否在 bash 中的同一卷上

shell - 如何在vim中映射长bash命令?

ubuntu - 使用 EC2 VPC 实例的新主机名动态更新主机文件

ubuntu - 是否使用 root 帐户使用 Ansible 配置服务器?

bash - 在本地X session 中远程运行命令?

bash - 将 FASTA 文件中的数值替换为不同文件中的索引。 (首选 Bash)

linux - 无法用另一个字符串 shell 替换文件中的字符串

Linux shell 脚本到 tar.gzip 日志文件超过 1 个月按月分组

git - 设置git ssh访问报错: gitosis need more than 1 value to unpack