shell - Shell 脚本可以逐行读取文件,但不能对每一行执行操作
问题描述
我正在尝试在多台机器上运行此命令
sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@x.x.x.x "mkdir test"
IP 存储在以下 .txt 文件中
$ cat ips.txt
10.0.2.15
10.0.2.5
我创建了一个 bash 脚本,它逐行读取这个文件。如果我使用以下命令运行它echo
:
#!/bin/bash
input="ips.txt"
while IFS= read -r line
do
echo "$line"
#sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$line "mkdir test"
done < "$input"
它打印每一行:
$ ./variables.sh
10.0.2.15
10.0.2.5
这让我明白脚本正在按预期工作。但是,当我用echo
要为每一行运行的命令替换该行时:
#!/bin/bash
input="ips.txt"
while IFS= read -r line
do
#echo "$line"
sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$line "mkdir test"
done < "$input"
它只对文件的第一个 IP 执行操作,然后停止。为什么?
解决方案
设法通过使用 afor
而不是 a来解决这个问题while
。脚本最终看起来像这样:
for file in $(cat ips.txt)
do
sshpass -p 'nico' ssh -o 'StrictHostKeyChecking=no' nico@$file "mkdir test"
done
推荐阅读
- python - 无法从 Visual Studio 代码解释器更改 python 版本
- ios12 - ios 12 浏览器中的 Samesite 问题
- kotlin - 如何在 Kotlin 中跳过泛型类型参数的规范?
- c++ - 为什么我会发出叮当声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- react-native - 使用 react native 从 api 修改时刷新屏幕
- android - ID 在 MainActivity.kt 中显示为未解析的引用
- c# - Entity Framework Core 抛出异常:无法使用 PostgreSQL 翻译 LINQ 表达式
- javascript - 按单词相关性将数组与另一个数组中的字符串匹配
- python - 字符串替换中的字符。清洁(DNA)
- python - 单击按钮后,Tkinter 未在新窗口中打开图像