LINUX.ORG.RU

function in function

 


0

1

Добрый день!

Есть массив данных, по каждому элементу в массиве идет вызов функции f1. Хочу добавить в функцию f1 - функцию f2. В функцию f2 я хочу добавить sleep и какую-то команду. Нужно сделать так, чтобы следующий элемент вызывал фунцию f1 также с вложенной функцией f2 (но при этом надо сделать так, чтобы каждый следующий элемент никогда не ждал завершения фунцкии f2, то есть чтобы f2 работал как то параллельно/независимо).

Реализуемо? Сейчас например так

function f1 {
echo 123
 function f2 {
 sleep 180
 echo 456
 }
}

echo test|while read a; do
f1
done
★★★

Последнее исправление: init_ (всего исправлений: 4)

В bash вложенная функция нужна только для того, чтобы опеределить разное тело функции в зависимости от вызванной функции из предыдущего scope, ведь функция определится в глобальном scope, потому других плюшек — нет. Всё остальное делается как обычно, хотите параллельность — значить вызов в фоне и т. д.

vodz ★★★★★
()

Твой код просто сделает echo 123 один раз и всё. Функцию f2 никто нигде не вызывает, соответственно что она есть что её нет без разницы. А если будешь вызывать - то совершенно не важно где ты её объявишь. Лучше объявлять нормально снаружи, потому что такие вложенные это бесполезное запутывание синтаксиса кода (на результат не влияет никак).

не ждал завершения фунцкии f2

Функции тут ни при чём. Чтобы не ждать команду надо в конце её запуска & дописать. Команда может быть и функцией тоже, но это не важно.

firkax ★★★★★
()