立即为每一行标准输入执行一个命令?

Vas*_*kov 3 linux bash command-line xargs gnu-parallel

如何stdin立即为每一行执行命令?

示例

(echo abc; sleep 10; echo def;) | ???
Run Code Online (Sandbox Code Playgroud)

xargs工具不会完成这项工作,因为它会阻塞直到看到所有数据(等待 stdout 关闭)。然而,当新行可用时,我必须立即执行命令。

Vas*_*kov 5

使用@Hennes 建议的 shell 脚本:

long_running_command | (
  while read -r LINE; do
    echo "line is: $LINE";
    command_to_execute "$LINE";
  done;
)
Run Code Online (Sandbox Code Playgroud)

与 相比parallel,这没有 ~ 150 毫秒 + 每行 3..7 毫秒的开销。它还适用于执行多行 bash 命令、重用函数或变量。