Я отладка странности со сценарием оболочки и интересно, есть ли у поняло, как «вилка» в Bash (&
) работает, возможно, потому, что я обычно использую его в отдельных командах через терминал, например:Что происходит, когда я использую `&` с функцией в сценарии Bash?
[~me]$ someExecutable &
Теперь в скрипт:
foo() {
echo "logic"
}
bar() {
echo "idic"
}
baz() {
echo "katra"
}
foo &
bar
baz
Мое намерение для функции foo
будет вызываться асинхронно, а затем оставшуюся часть сценария, чтобы продолжить выполнение в исходном контексте процесса.
Когда я выполнить этот пример сценария я сделать получить ожидаемый результат:
logic
idic
katra
(то есть, только отдельные очевидные призывы к bar
и baz
, я вовсе не беспокоили относительное из трех линий вывода, которые, как я понимаю, могут различаться)
, но я могу ошибаться как выход, так и сам сценарий. Если это так, это, безусловно, объяснит странность, которую я вижу в своем реальном коде, и избавит меня от необходимости копать дальше.
Возможно ли, что в дочернем процессе после вызова foo
сценарий разветвленной оболочки продолжит? Это означает, что оставшаяся часть моего сценария оболочки будет выполнена дважды?
Что происходит, когда я использую &
как в сценарии Bash?
Спасибо, что я был после! –
+1 для решения проблемы. Quibble: foo() работает в (асинхронном) * подселе *, который является отдельным * процессом *. – mklement0