Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 逐行处理文件在ksh中不起作用_Loops_Unix_While Loop_Ksh_Do While - Fatal编程技术网

Loops 逐行处理文件在ksh中不起作用

Loops 逐行处理文件在ksh中不起作用,loops,unix,while-loop,ksh,do-while,Loops,Unix,While Loop,Ksh,Do While,这看起来很简单,但我不确定,若我试图对从文件中读取的数据进行任何处理,为什么它不会读取超过第一行的内容 代码: 当我运行这段代码时,它只在第一行工作,然后退出。shell中的调试没有显示任何问题。当我在没有ssh操作/命令的情况下运行它时,它会处理整个数据文件 壳牌是ksh: # ps PID TTY TIME CMD 1424 pts/138 0:00 ps 18521 pts/138 0:02 ksh 执行时,仅打印(第一行): 有什么想法吗?问

这看起来很简单,但我不确定,若我试图对从文件中读取的数据进行任何处理,为什么它不会读取超过第一行的内容

代码:

当我运行这段代码时,它只在第一行工作,然后退出。shell中的调试没有显示任何问题。当我在没有ssh操作/命令的情况下运行它时,它会处理整个数据文件

壳牌是ksh:

# ps
   PID TTY         TIME CMD
  1424 pts/138     0:00 ps
 18521 pts/138     0:02 ksh
执行时,仅打印(第一行):


有什么想法吗?

问题在于
ssh
本身,因为它使用标准输入,所以下次循环获取另一行时,就没有剩下的了。您可以通过将命令更改为:

ssh $h cat
并在第一次
ssh
会话期间输出文件的其余部分

您至少可以通过两种方法解决此问题,第一种方法是简单地将
ssh
与标准输入断开:

ssh $h grep $u /etc/shadow </dev/null
ssh$h grep$u/etc/shadow
unixhost01 : admin69
admin69:$1$gFfcEQETGZAo6W0:17599:0:90:10:::
ssh $h cat
ssh $h grep $u /etc/shadow </dev/null
while IFS="" read -u3 -r line ; do   # reads file #3
    blah blah blah
done 3</var/tmp/user_data            # sends data via file #3