Фильтрация разбиения GNU с помощью пользовательской функции оболочки - PullRequest
0 голосов
/ 25 июня 2018

Есть ли способ использовать GNU split --filter с пользовательской функцией оболочки, например

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

, которую я ожидал бы вывести

chunk_00
chunk_01
...

Конечно, эхо впользовательский функционал предназначен только для выражения моего вопроса, в моем конкретном случае пользовательская функция создает скрипт, который использует фрагменты из split в качестве входных данных.

Кажется, что оболочка GNU принимает только стандартные команды оболочки в пределах --filter.

Какой умный способ обойти это?

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете сделать это, экспортировав функцию в среду, которая доступна для вспомогательной оболочки, запущенной через split.Например, с 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, которая установлена ​​в качестве вспомогательной оболочки для запускакоманда --filter.Если вы используете другую оболочку, вам может потребоваться добавить export SHELL=/bin/bash перед запуском split.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...