有没有办法使用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命令。
有什么聪明的方法吗?
您可以通过将函数导出到环境来执行此操作,该环境可通过拆分运行的子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
。