使用自定义shell函数过滤GNU拆分

问题描述 投票:1回答:1

有没有办法使用GNU拆分--filter与自定义shell函数,如

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

我希望输出

chunk_00
chunk_01
...

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

似乎GNU shell只接受--filter中的标准shell命令。

有什么聪明的方法吗?

bash split
1个回答
0
投票

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

恶心.是

#!/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的this answer的更多细节。

请注意,split使用SHELL变量设置为子shell来运行--filter命令。如果您运行的是另一个shell,则可能需要在运行export SHELL=/bin/bash之前添加split

© www.soinside.com 2019 - 2024. All rights reserved.