我調試用shell腳本的古怪,不知道我是否誤解了bash的「叉」(&
)是如何工作的,也許是因爲我通常是在單一命令中使用它通過一個終端,如:當我在Bash腳本中使用帶`&的函數時會發生什麼?
[~me]$ someExecutable &
現在,在shell腳本:
foo() {
echo "logic"
}
bar() {
echo "idic"
}
baz() {
echo "katra"
}
foo &
bar
baz
我的目的是爲功能foo
進行異步調用,然後對腳本的剩餘部分繼續在原來的進程上下文中執行。
當我執行這個示例腳本我做獲得預期的輸出:
logic
idic
katra
(即,bar
和baz
唯一的單視電話;我不是在所有的相對困擾訂單的三行輸出,據我瞭解可能會有所不同)
但我可能會誤解輸出和腳本本身。如果是這樣,那肯定會解釋我在真實代碼中看到的怪異現象,並且不需要進一步挖掘。
是否有可能的是,在子進程中,調用foo
後,分叉的shell腳本會繼續嗎?這意味着我的shell腳本的其餘部分將被執行兩次?
當我在Bash腳本中使用&
時,發生了什麼?
謝謝 - 這就是我以後的! –
+1解決問題的核心。 Quibble:foo()運行在一個(異步)* subshell *中,這是一個獨立的*進程*。 – mklement0