Bash:从多个 xargs 并行进程记录标准输出到单独的日志文件

标签 bash stdout xargs tee

我正在使用 xargs 产生的多个并行进程处理一个文本文件。我还需要将每个进程的标准输出捕获到一个单独的日志文件中。下面是一个示例,其中每个进程的输出交织到一个文件中——这不是我想要的。

理想情况下,每个日志文件都应按文件行号编号,即logfile-1、logfile-2等。

cat inputfile.txt | xargs -n 1 -P 8 ./myScript.sh | tee logfile

如果可能的话,最好避免使用外部包装脚本,但如果有办法用 here 文档包装 myScript,那就行得通了。

最佳答案

试试这个:

nl inputfile.txt | xargs -n 2 -P 8 sh -c './myScript.sh "$1" > logfile-$0'

这假定 inputfile.txt 中的每个参数都在其自己的行上并且不包含空格。 nl 命令为每一行编号,它将每个参数与一个唯一的数字配对。 xargs 命令一次接受两个参数,第一个是行号,第二个是 inputfile.txt 中的相应行,并将它们传递给 shsh 命令使用参数分别生成输出文件名和 myScript.sh 的参数。

关于Bash:从多个 xargs 并行进程记录标准输出到单独的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167204/

相关文章:

python - 使用 Python Paramiko 通过 SSH 将输入/变量传递给命令/脚本

Python 子进程将调用输出存储到文件

bash - 从使用 xargs 执行的命令中读取标准输入

linux - 使用 xargs 解压多个文件

linux - 将现有数组中的所有元素传递给 xargs

bash - sed 删除所有大写字母

bash - 使用冒号分隔的字符串遍历文件

bash - 从Docker容器A(在Docker容器B上)运行Bash脚本

c - 非阻塞标准输出[C/Linux]

windows - 检查 Windows 文件是否重定向到自身