在sh中逐行读取命令输出(没有bash)
Read command output line by line in sh (no bash)
我基本上是在寻找一种方法来做到这一点
list=$(command)
while read -r arg
do
...
done <<< "$list"
使用 sh 而不是 bash。由于最后一行,代码没有 运行:
syntax error: unexpected redirection
有任何修复吗?
编辑:我需要编辑变量并在循环外访问它们,所以使用 |
是不可接受的(因为它创建了一个具有独立范围的子 shell)
编辑 2:这个问题与 Why does my Bash counter reset after while loop 不相似,因为我没有使用 |
(正如我在上次编辑中注意到的那样)。我要求另一种实现它的方法。 (链接问题的答案仅解释了问题发生的原因,但未提供任何适用于 with sh (no bash).
的解决方案
你有什么理由不能这样做?应该工作..除非你在循环内分配任何你希望在完成时可见的变量。
command |
while read -r arg
do
...
done
在 POSIX sh
中没有纯粹的句法方法可以做到这一点。您需要为命令的输出使用临时文件或命名管道。
mkfifo output
command > output &
while read -r arg; do
...
done < output
rm output
我基本上是在寻找一种方法来做到这一点
list=$(command)
while read -r arg
do
...
done <<< "$list"
使用 sh 而不是 bash。由于最后一行,代码没有 运行:
syntax error: unexpected redirection
有任何修复吗?
编辑:我需要编辑变量并在循环外访问它们,所以使用 |
是不可接受的(因为它创建了一个具有独立范围的子 shell)
编辑 2:这个问题与 Why does my Bash counter reset after while loop 不相似,因为我没有使用 |
(正如我在上次编辑中注意到的那样)。我要求另一种实现它的方法。 (链接问题的答案仅解释了问题发生的原因,但未提供任何适用于 with sh (no bash).
你有什么理由不能这样做?应该工作..除非你在循环内分配任何你希望在完成时可见的变量。
command |
while read -r arg
do
...
done
在 POSIX sh
中没有纯粹的句法方法可以做到这一点。您需要为命令的输出使用临时文件或命名管道。
mkfifo output
command > output &
while read -r arg; do
...
done < output
rm output