首页 > 解决方案 > 使用自定义 shell 函数过滤 GNU 拆分

问题描述

有没有办法将 GNU split--filter与自定义 shell 函数一起使用,例如

my_func () {
  echo $1
}
split -d 10 INPUT_FILE chunk_ --filter="my_func $FILE$"

我希望输出

chunk_00
chunk_01
...

当然,自定义函数中的回声只是为了在这里表达我的问题,在我的具体情况下,自定义函数创建了一个脚本,该脚本使用 split 中的块作为输入。

似乎 GNU shell 只接受--filter.

有什么聪明的方法吗?

标签: bashsplit

解决方案


您可以通过将函数导出到环境来执行此操作,该环境可用于通过 split 运行的子 shell。例如使用 bash:

ex.sh

#!/bin/bash

my_func() {
  echo $1
}

export -f my_func

seq inf | split -d --filter='my_func $FILE' /dev/stdin chunk_

如果你像这样运行它:

bash ex.sh | head

输出是:

chunk_00
chunk_01
chunk_02
chunk_03
chunk_04
chunk_05
chunk_06
chunk_07
chunk_08
chunk_09

有关UL的此答案的更多详细信息。

请注意,split使用任何SHELL设置的变量作为子 shell 来运行--filter命令。如果您正在运行不同的 shell,您可能需要export SHELL=/bin/bash在运行前添加split.


推荐阅读