在sh(无bash)中逐行读取命令输出

时间:2015-08-18 12:06:55

标签: sh io-redirection

我基本上是在寻找一种方法来实现这个目标

list=$(command)
while read -r arg
do
        ...
done <<< "$list"

使用sh intead bash。由于最后一行,代码不会运行:

syntax error: unexpected redirection

任何修复?

编辑:我需要编辑变量并在循环外访问它们,因此使用|是不可接受的(因为它创建了一个具有独立范围的子shell)

编辑2:此问题与Why does my Bash counter reset after while loop不相似,因为我没有使用|(正如我在上一次编辑中所注意到的)。我要求另一种方法来实现它。 (链接问题的答案仅解释了问题发生的原因,但没有提供任何解决方案使用sh(无bash)

2 个答案:

答案 0 :(得分:2)

在POSIX sh中没有纯粹的语法方法。您需要使用临时文件来输出命令,或使用命名管道。

mkfifo output
command > output &

while read -r arg; do
    ...
done < output
rm output

答案 1 :(得分:0)

你有什么理由不能这样做吗?应该工作..除非你在循环中分配你希望在完成后可见的任何变量。

 command |
 while read -r arg
 do
         ...
 done