读取线在第一次迭代后停止

时间:2014-02-18 02:43:17

标签: bash unix loops iteration

我正在尝试执行一个简单的脚本,使用从文件输入的服务器名称上的svmatch来捕获多个服务器的详细信息。

#!/bin/sh
while read line; do
svmatch $line
done < ~/svr_input;

svmatch命令在作为备用命令执行时没有问题。

1 个答案:

答案 0 :(得分:9)

/dev/null

重定向内部命令的标准输入
svmatch $line </dev/null

否则,svmatch能够使用stdin(当然,这是剩余行的列表)。

另一种方法是使用除默认值stdin之外的文件描述符:

#!/bin/sh
while IFS= read -r line <&3; do
  svmatch "$line"
done 3<svr_input

...如果使用bash而不是/bin/sh,你还有其他一些选择;例如,bash 4.1或更新版本可以分配一个免费的文件描述符,而不是要求特定的FD编号进行硬编码:

#!/bin/bash
while IFS= read -r -u "$fd_num" line; do
  do-something-with "$line"
done {fd_num}<svr_input