Bash
為什麼使用嵌套命令的儲存返回碼退出會導致 Dash 和 Bash 中的返回碼不同?
跑步
bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
導致
test1
被列印到控制台並echo $?
列印1
在我的理解中是正確的,因為命令應該返回內部[b/d]ash -c
返回的內容,而dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
產生相同的輸出,但
0
根據echo $?
.我想了解這種差異,以拓寬我對 shell 和可移植 shell 程式的理解。
我在 Ubuntu 17.10 (Artful Aardvark) 上使用
bash
4.4.12 和dash
0.5.8-2.3ubuntu1。
&>
不在 POSIX 中且不受dash
. 它被解析為& >
,因此該命令是後台執行的。從父級的角度來看,後台命令的退出狀態為零,因為在您閱讀 $? 時它們還沒有退出。這也是為什麼(至少對我而言)命令完成後
test1
“ ”輸出出現在我的提示符中的原因。Bash
&> foo
相當於> foo 2>&1
,可移植腳本應該使用後者。