我试图创建一个实用程序来从标准输入读取列表,然后给它一个命令。
我制作了这个脚本:(命名consume_list
)
#!/bin/bash
set -euo pipefail
eval "hack() { $@ ; }"
while read -r line
do
hack "$line"
done < <(cat /dev/stdin)
这样我就可以包装命令并简化脚本的阅读和制作。
一个糟糕的例子是在列表上使用 bash 替换(对我来说,它比 sed、cut、tr 等更容易),如下所示:
cat log.txt | grep 'error' | consume_list 'echo ${1:20:10}'
这将
有没有合适的工具为了达成这个 ?
答案1
在标准输入(或其他任何地方)的一系列行上运行命令的“正确”工具是xargs
:
grep error log.txt | xargs -r -d\\n -n 1 bash -c 'echo ${0:20:10}'
然而,在您的示例中,使用它确实要好得多cut
:
grep error log.txt | cut -c21-30