Bash脚本中的SSH搞乱了文件读取
我有一个脚本,可以逐行读取文件,并根据它读取的内容进行操作。它所做的一件事是通过ssh连接到远程服务器并获取一些信息。由于某些我完全无法理解的原因,这会停止读取文件中的行 脚本本质上是(为了简化问题,我删掉了很多脚本,所以如果它看起来没有什么作用,请不要担心):Bash脚本中的SSH搞乱了文件读取,bash,unix,Bash,Unix,我有一个脚本,可以逐行读取文件,并根据它读取的内容进行操作。它所做的一件事是通过ssh连接到远程服务器并获取一些信息。由于某些我完全无法理解的原因,这会停止读取文件中的行 脚本本质上是(为了简化问题,我删掉了很多脚本,所以如果它看起来没有什么作用,请不要担心): 此脚本最后仅在csv的第一行上运行。如果我将脚本的“ssh”部分替换为其他内容,那么它会一直运行到文件的所有行。有什么好处 ssh正在使用stdin。Pass-n如果在循环中运行从stdin读取的命令(例如ssh),则需要确保: 您的
此脚本最后仅在csv的第一行上运行。如果我将脚本的“ssh”部分替换为其他内容,那么它会一直运行到文件的所有行。有什么好处
ssh
正在使用stdin。Pass-n
如果在循环中运行从stdin读取的命令(例如ssh
),则需要确保:
- 您的循环没有在stdin上迭代
- 您的命令已重定向其stdin:
while read -u 5 -r; do
ssh "$REPLY" ...
done 5<file
读取时-u5-r;做
ssh“$REPLY”。。。
完成5 ssh正在吃你的stdin吗(这里,你的是stdin)?尝试ssh-n,看看会发生什么……我强烈建议您在逐行读取文件时始终使用read-r
,如果空格对您很重要,您可能需要,而IFS=$'\n'read-r
。这样做了。谢谢如果您将来想了解更多信息,请通过运行“manssh”查找-n选项。脚本的最终工作版本与上面相同,只是ssh部分显示“ssh-nsome_server…”
while read -u 5 -r; do
ssh "$REPLY" ...
done 5<file
while read -u "$file_fd" -r; do
ssh "$REPLY" ...
done {file_fd}<file
while read -r; do
ssh "$REPLY" ... </dev/null
done <file